¿Cómo regresar inmediatamente del proceso de niño bifurcado en Linux?
Pregunta
No soy familar con el desarrollo de Linux C.
Mi código:
....
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{
...
}
Lo que quiero hacer es volver inmediatamente desde Iniciar un nuevo proceso en el proceso secundario.
Porque en el programa DRONRRENT, execv (workdir , args);
no volverá.(Necesito iniciar un proceso de larga duración).
Lo que quiero hacer es comenzar este proceso de administración a largo plazo y regresar inmediatamente en mi código C, para que mi programa C pueda salir.
¿Cómo puedo hacer esto? Tal vez haz que mi se inició nuevo niño procese un demonio, ¿cómo hacerlo por la llamada API?
Solución
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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow