Comment revenir immédiatement à partir du processus d'enfant fourche à Linux?
Question
Je ne suis pas familier avec le développement de Linux C.
Mon code:
....
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{
...
}
Ce que je veux faire est de revenir immédiatement à partir du processus de démarrage de nouveau processus en matière d'enfants.
Parce que dans le programme Current, execv (workdir , args);
ne reviendra pas.(Je dois commencer un long processus de course).
Ce que je veux faire est de démarrer ce processus à long terme et de revenir immédiatement dans mon code C, de sorte que mon programme C puisse quitter.
Comment puis-je faire cela? Peut-être faites-le peut-être que mon nouveau processus enfant a commencé un démon, comment le faire par API Call?
La solution
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.