情景: 我正在開發其啓動並通過請求(TCP-IP)停止在一個守護進程守護進程監視應用程序。 爲了實現這一點,分叉之後,我打電話給setsid()
,以便從父級(監視進程)「分離」新進程。試圖殺死一個衍生的進程終止與失效的過程跌宕
當我嘗試殺死其中一個進程時,監視應用程序創建的進程結束了。
這裏是我的代碼:
int retval;
char* arg_list[] = {
NULL /* The argument list must end with a NULL. */
};
retval = fork();
if (retval == 0)
{
umask(0);
setsid();
execv(LBSDPATH, arg_list);
exit(0);
}
據我瞭解,停業/殭屍進程是指父並沒有與過程加入呢。不要setsid()
解決它?
我知道,但我希望我產生的過程獨立工作,就像守護進程一樣。 – stdcall
@Mellowcandle:然後'fork()'兩次。讓第二個'fork()'ed過程執行'exec *()',並且第一個fork()過程結束。當第一個'fork()'進程死亡時,它的子進程(第二個fork()'進程並且帶有exec *()編譯進程)由'init'繼承,然後處理'SIGCHLD '孩子的死亡。 – alk
我不認爲我解釋自己是正確的,請參閱我的編輯問題。 – stdcall