我正在使用system()调用来启动“tail -f”。
我看到的一件事是,调用tail需要2个进程(我可以在ps中看到): 1)sh -c tail filename 2)尾文件名
正如man page所说:system()通过调用/ bin / sh -c命令执行命令中指定的命令。我想,过程1)是不可避免的,对吗?
我只是想知道我是否可以将进程数从2减少到1。
提前致谢。
答案 0 :(得分:4)
最好使用fork()/exec()
启动流程。 system()
调用shell,因此你应该注意传递给它的内容。
/* Untested code, but you get the idea */
switch ((pid = fork())) {
case -1:
perror("fork");
break;
case 0:
execl("/usr/bin/tail", "tail", "-f", filename);
perror("execl");
exit(1);
default:
wait(pid);
...
}
答案 1 :(得分:3)
系统总是执行sh -c命令。如果只需要一个进程,请执行system(“exec tail -f”)。