Wie kann ich unter Linux sofort von einem gespaltenen untergeordneten Prozess zurückkehren?
Frage
Ich bin mit der Linux-C-Entwicklung nicht vertraut.
mein 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{
...
}
Was ich tun möchte, ist, sofort vom gestarteten neuen Prozess im untergeordneten Prozess zurückzukehren.
Denn im aktuellen Programm execv (workdir , args);
werde nicht zurückkehren.(Ich muss einen lang laufenden Prozess starten).
Ich möchte diesen Langzeitprozess starten und sofort in meinen C-Code zurückkehren, damit mein C-Programm beendet werden kann.
Wie kann ich das machen?Vielleicht mache ich meinen neu gestarteten untergeordneten Prozess zu einem Daemon, wie geht das per API-Aufruf?
Lösung
Etwas wie das:
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;
}
Verzweigt und trennt einen Prozess und wird beendet.Es „dämonisiert“ das Programm.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow