“execv”子过程存在和终止

时间:2011-12-11 22:35:32

标签: c unix process exec

popen() alternative - 我使用accepted答案(pipe / fork / exec方法)来解决我的问题。唯一不同的是,我使用execl而不是execv

现在,我的问题是,父进程是否可以控制execv创建的子进程?让我们说accepted回答中建议的整个序列是用于拖尾1个文件,我有很多这样的文件;我将整个序列放在一个函数中,如果我多次调用此函数,在某个时间点,是否可能有许多子tail进程?

我想知道的是, 1)我可以在任何时间点运行多个子进程吗? 2)子进程(由execv创建)如何终止?在execv调用后,父进程知道子进程(由execv创建)何时完成/终止? - 回答。

3 个答案:

答案 0 :(得分:3)

Execl和execv的行为方式相同。 The only difference is how you specify the argument vector。 “l”函数将参数向量作为逗号分隔的列表。如,

execl("/bin/ls", "/bin/ls", "-r", "-t", "-l", NULL);

“v”字符将参数向量作为实际向量。如,

char *args[] = {"/bin/ls", "-r", "-t", "-l", NULL };
execv("/bin/ls", args);

有关C中过程控制的信息,请参阅herehere

通常,子进程在执行完毕后终止。父母或其他进程可以随时杀死孩子。父级可以使用waitpid()函数等待子级执行完毕或检查子级是否已完成执行。

答案 1 :(得分:2)

父母收到SIGCHLD信号。

答案 2 :(得分:1)

如果你有孩子的标准输出管道,你可以经常通过观察管道获得EOF来避免信号/等待恶化。你仍然需要收获孩子以避免僵尸虽然http://en.wikipedia.org/wiki/Zombie_process(如果你不关心孩子的退出状态,这通常用双叉完成,所以你作为孙子运行你真正的子过程并收获中间儿童)。 GLib代码可能是最复杂的可能示例:http://git.gnome.org/browse/glib/tree/glib/gspawn.c#n1191

相关问题