【发布时间】:2011-10-09 04:42:31
【问题描述】:
我正在使用 C++ 并尝试在外部进程中运行 shell 命令。这是我到目前为止的代码:
pid_t pid;
pid = fork();
if(pid == 0){
execv(args[0],args);
} else {
wait();
}
我的第一个问题是我需要从传递给 exec 的 shell 命令中获取输出,但我不知道如何获取。运行上面的代码后,主程序也复制了自己,我不知道为什么。
【问题讨论】:
-
pid == -1时也应该处理这种情况。即使只是打印一条错误消息并退出。 -
您应该有一个
exit(1);,并且可能在execv()之后有一个打印消息。您的“重复本身”可能会发生,因为argv[0]是"ls"而不是"/bin/ls"和execv()不使用PATH 进行搜索。因此,execv()失败,并且孩子继续或多或少地执行父母会做的任何事情。