我需要运行带有sudo特权的独立进程的测试(因为它们需要运行特权指令,例如什马特)。
我使用.cargo/config使用sudo运行测试,这是导致错误的原因,删除它允许测试工作,直到尝试shmat失败为止。
在一个最小的可重复的例子中,错误是:
thread 'tests::base' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/lib.rs:4:103
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace该项目的布局如下:
.
├── .cargo/
│ └── config.toml
├── Cargo.lock
├── Cargo.toml
└── src/
├── lib.rs
└── bin/
└── new_process.rsconfig.toml
[target.x86_64-unknown-linux-gnu]
runner = 'sudo -E'cargo.toml
[package]
name = "mre"
version = "0.1.0"
[dependencies]
libc = "0.2.127"lib.rs
#[cfg(test)]
mod tests {
#[test]
fn base() {
let output = std::process::Command::new("cargo").args(["run","--bin","new_process"]).output().unwrap();
dbg!(output);
}
}new_process.rs
fn main() {
let shmid = libc::shmget(libc::IPC_PRIVATE, 1024*4, libc::IPC_CREAT);
let shared_mem_ptr = libc::shmat(shmid, std::ptr::null(), 0);
println!("hello world");
}发布于 2022-09-01 14:37:14
如果您通过沙沙安装了货物,它可能会安装在您的主目录中,而不是像在/usr/bin/中那样在全局上安装。
在我的机器上:
$ which cargo
/home/linus/.cargo/bin/cargo因此,在sudo下,找不到货物:
$ sudo cargo
sudo: cargo: command not found这是从unwrap获得的与Command::new().output()结果完全相同的错误。因此,这不是一个生锈的问题,而是一个linux问题。
// in lib.rs base()
// Modify for the location of cargo on your machine
Command::new("/home/linus/.cargo/bin/cargo")/usr/bin/cargo到/home/linus/.cargo/bin/cargo的符号链接。sudo ln -s /home/linus/.cargo/bin/cargo /usr/bin/cargo然后,货物也被发现使用sudo。
https://stackoverflow.com/questions/73561082
复制相似问题