如何立即从Linux中的叉子子进程返回?
题
我不是熟悉的linux c开发。
我的代码:
....
if((pid=fork())==0){
//child process
//start a process, may be need to change execv to other call
execv (workdir , args);
}else if (pid<0){
...
}else{
...
}
.
我想做的就是立即返回Shoud Finain进程中的新进程。
因为在CRISRENT程序中,execv (workdir , args);
不会返回。(我需要开始长期运行的过程)。
我想要做的是开始这个长期的流程并立即返回我的c代码,以便我的c程序可以退出。
我该怎么办? 也许让我开始新的孩子进程一个守护程序,如何通过API呼叫进行操作?
解决方案
Something like this:
close(0); open("/dev/null", 0);
close(1);
if(open("/dev/null", O_WRONLY) < 0) {
perror("/dev/null");
exit(1);
}
switch(pid = fork()) {
case -1:
perror(argv[0]);
exit(1);
break;
case 0:
fflush(stdout);
close(2); dup(1);
setpgrp();
setsid();
execv(argv[0], argv);
execvp(argv[0], argv);
perror(argv[0]);
_exit(1);
break;
default:
exit(0);
break;
}
Will fork and detach a process, and exit. It "daemonizes" the program.
不隶属于 StackOverflow