Как немедленно вернуться из разветвленного дочернего процесса в Linux?
Вопрос
Я не знаком с разработкой Linux C.
мой код:
....
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{
...
}
Я хочу немедленно вернуться из запущенного нового процесса в дочернем процессе.
Потому что в текущей программе execv (workdir , args);
не вернется.(Мне нужно запустить длительный процесс).
Что я хочу сделать, так это запустить этот длительный процесс и немедленно вернуться в свой код на C, чтобы моя программа на C могла завершиться.
Как я могу это сделать?Может быть, сделать мой новый дочерний процесс демоном, как это сделать с помощью вызова API?
Решение
Что-то вроде этого:
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;
}
Разветвит и отсоединит процесс и завершит работу.Это «демонизирует» программу.
Не связан с StackOverflow