Come tornare immediatamente dal processo infantile biforcato in Linux?
Domanda
Non sono familiare con lo sviluppo di Linux C.
Il mio codice:
....
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{
...
}
.
Quello che voglio fare è tornare immediatamente dall'inizio del nuovo processo nel processo infantile.
Poiché nel programma current, execv (workdir , args);
non tornerà.(Ho bisogno di avviare un processo lungo).
Cosa voglio fare è avviare questo processo di lunga data e restituire immediatamente nel mio codice C, in modo che il mio programma C possa uscire.
Come posso farlo? Forse rendi il mio nuovo bambino di elaborare un daemon, come farlo con la chiamata API?
Soluzione
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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow