【问题标题】:Use exec/fork to run external process使用 exec/fork 运行外部进程
【发布时间】: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() 失败,并且孩子继续或多或少地执行父母会做的任何事情。

标签: c++ exec fork


【解决方案1】:

args[0]大概是正在运行的程序的名字,所以它会fork然后自己执行。

为了收集输出,您需要安排明确地传递它。 Unix pipe() 调用经常用于此目的。

【讨论】:

  • args[0] 不是正在运行的程序的名称。在我的示例程序中,它是 'ls'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2021-11-13
  • 2022-11-02
  • 1970-01-01
  • 2020-02-02
  • 2016-03-18
  • 2011-10-06
相关资源
最近更新 更多