system()调用行为

时间:2011-06-30 19:24:56

标签: c unix process system-calls

我正在使用system()调用来启动“tail -f”。

我看到的一件事是,调用tail需要2个进程(我可以在ps中看到): 1)sh -c tail filename 2)尾文件名

正如man page所说:system()通过调用/ bin / sh -c命令执行命令中指定的命令。我想,过程1)是不可避免的,对吗?

我只是想知道我是否可以将进程数从2减少到1。

提前致谢。

2 个答案:

答案 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”)。