[英]“execv” child process existance and termination
popen()替代 -我正在使用accepted
答案(pipe / fork / exec方法)来解决我的问题。 唯一的区别是,我使用的是execv
而不是execl
。
现在,我的问题是,父进程对execv
创建的子进程有任何控制权吗? 可以说,在accepted
答案中建议的整个顺序是拖尾1个文件,而我有很多这样的文件。 我将整个序列放在一个函数中,如果我在某个时间点多次调用此函数,是否可能会有很多子tail
进程?
我想知道的是,1)我可以在任何时间运行多个子进程吗? 2)子进程(由execv创建)如何终止? 在execv
调用之后,父母是否知道子进程(由execv创建)何时完成/终止? -回答。
Execl和execv的行为方式相同。 唯一的区别是您如何指定参数向量 。 “ l”函数将参数向量作为逗号分隔的列表。 例如,
execl("/bin/ls", "/bin/ls", "-r", "-t", "-l", NULL);
“ v”函数将参数向量作为实际向量。 例如,
char *args[] = {"/bin/ls", "-r", "-t", "-l", NULL };
execv("/bin/ls", args);
通常,子进程在完成执行后会终止。 父母或其他程序可以随时杀死孩子。 父母可以使用waitpid()函数来等待,直到孩子完成执行或检查孩子是否完成执行。
父母接收到SIGCHLD
信号。
如果您的管道来自孩子的性病,通常可以通过观察管道是否达到EOF来避免信号/等待加重。 您仍然可以通过http://en.wikipedia.org/wiki/Zombie_process收割孩子以避免僵尸(如果您不关心孩子的退出状态,通常使用双叉来完成,因此您可以真正子进程作为孙子并获得中间子)。 GLib代码可能是最复杂的示例: http : //git.gnome.org/browse/glib/tree/glib/gspawn.c#n1191
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.