popen创造了一个额外的过程

时间:2011-07-19 05:27:22

标签: c exec process popen ps

我正在尝试用popen执行(fork off)一个命令,我看到的是,还有一个额外的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

阅读完manpage后,我知道这是popen()的工作原理。

上述问题的答案由@R ..

提供

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

3 个答案:

答案 0 :(得分:2)

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

如果你想避免它,只需使用forkclosemkpipeexec(这或多或少是内部popen所做的事情) 。如果您不需要管道,则可以forkexec

答案 1 :(得分:2)

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

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

使用:

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

答案 2 :(得分:1)

就popen而言,它应该调用shell(阅读联机帮助页)

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