2

我正在尝试使用 popen 执行(分叉)命令,我看到的是,还有一个额外sh -c "my_command process"的。

我想尽量减少进程的数量,所以有可能摆脱它吗?

ps输出:

root@home% ps awux | grep my_command
root 638  0.0  0.1  040  1424  ??  I    10:12PM   0:00.00 sh -c my_command /home/war
root 639  0.0  0.0  608   932  ??  S    10:12PM   0:00.01 my_command /home/war

阅读手册页后,我知道这就是 popen() 的工作原理。

上述问题的答案由@R. 提供。

我的要求是,我需要将命令的输出转储到一个文件中,并逐行读取该文件并处理输出。这就是我使用 popen 的原因,因为它在文件中返回输出。我可以通过任何 exec 调用来实现吗?

4

3 回答 3

3

你应该听那些建议你不要使用的好人popen——这很糟糕。但是对于您遇到的问题,有一个简单的解决方法 - 添加exec到您传递给的命令行的开头popen。也就是说,而不是:

popen("my_command /home/war", ...

利用:

popen("exec my_command /home/war", ...
于 2011-07-19T06:05:30.983 回答
2

popen用于sh生成子进程,就像system在 POSIX 系统上一样。

如果你想避免它,只需使用fork, close, mkpipeand exec(这或多或少是popen在内部做的)。如果您不需要管道,您可以使用forkexec

于 2011-07-19T05:32:40.127 回答
1

就 popen 而言,它应该调用 shell(阅读手册页)

要跳过 shell 进程,您可以执行 fork/exec

于 2011-07-19T05:32:59.270 回答