Como retornar imediatamente do processo filho bifurcado no Linux?
Pergunta
Não estou familiarizado com o desenvolvimento do Linux C.
meu 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{
...
}
O que eu quero fazer é retornar imediatamente do novo processo iniciado no processo filho.
Porque no programa atual, execv (workdir , args);
não retornará.(Preciso iniciar um processo longo).
O que eu quero fazer é iniciar esse processo de longo prazo e retornar imediatamente no meu código C, para que meu programa C possa sair.
Como posso fazer isso?Talvez fazer com que meu novo processo filho iniciado seja um daemon, como fazer isso por chamada de API?
Solução
Algo assim:
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;
}
Irá bifurcar e desanexar um processo e sair.Ele "daemoniza" o programa.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow