我正在尝试用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的原因,因为它返回文件中的输出。我可以通过任何执行电话来实现吗?
答案 0 :(得分:2)
popen
使用sh
来生成子进程,就像system
在POSIX系统上一样。
如果你想避免它,只需使用fork
,close
,mkpipe
和exec
(这或多或少是内部popen
所做的事情) 。如果您不需要管道,则可以fork
和exec
。
答案 1 :(得分:2)
你应该倾听那些建议你不要使用popen
的好人 - 这很糟糕。但是对于您遇到的问题有一个简单的解决方法 - 将exec
添加到传递给popen
的命令行的开头。也就是说,而不是:
popen("my_command /home/war", ...
使用:
popen("exec my_command /home/war", ...
答案 2 :(得分:1)
就popen而言,它应该调用shell(阅读联机帮助页)
要跳过shell进程,可以执行fork / exec