繁体   English   中英

“ execv”子进程的存在和终止

[英]“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);

有关C中过程控制的信息,请参见此处此处

通常,子进程在完成执行后会终止。 父母或其他程序可以随时杀死孩子。 父母可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM