所以我有一个简单的fork和exec程序。它工作得很好,但我希望能够分离启动的进程,我尝试了一个没有等待的fork:
if((pid = fork()) < 0)
perror("Error with Fork()");
else if(pid > 0) {
return "";
}
else {
if(execl("/bin/bash", "/bin/bash", "-c", cmddo, (char*) 0) < 0) perror("execl()");
exit(0);
}
它启动进程很好,但当我的主应用关闭时,我的分叉进程也是如此。
在主进程(启动它的)关闭后,我如何保持分叉进程运行?
Thanks:D
3条答案
按热度按时间kiayqfof1#
如果你想启动一个detached/daemon进程,可以做以下几件事:
to94eoyn2#
也许你真正想要的是忽略你的fork()进程中的SIGHUP,因为这通常是导致程序崩溃的原因。也就是说,你需要做的是
使用
nohup
安排一个读取器,这将避免可能的写入关闭管道。为了避免这种情况,您可以安排标准输出不可用,或者忽略SIGPIPE
。有许多信号在未忽略时终止程序(参见man signal
;一些信号不能被忽略),但是将被发送到孩子的信号是SIGHUP
。hi3rlvi23#
EX1:当客户端不退出时,不等待
EX2:当客户端退出时,等待子进程分离
EX3:当系统有setsid命令时,没有等待
有2个源代码可以参考