我試圖從子進程運行閃爍命令行。 例如是這樣的:linux fork - execl,執行的進程變成殭屍
int hangup() {
write_on_display("line3", " ");
write_on_display("hide_icon", "DIALTONE");
write_on_display("hide_icon", "BACKLIGHT");
int pid = fork();
if (pid == 0) {
int res = execl("/usr/bin/twinkle", " ", "--immediate", "--cmd",
"answerbye", (char *) NULL);
_exit(0);
} else {
perror("hangup");
return 0;
}
return 1;
}
但閃爍變得殭屍:
10020 pts/1 Z+ 0:00 [twinkle] <defunct>
10040 pts/1 Z+ 0:00 [twinkle] <defunct>
10053 pts/1 Z+ 0:00 [twinkle] <defunct>
10064 pts/1 Z+ 0:00 [twinkle] <defunct>
10097 pts/1 Z+ 0:00 [twinkle] <defunct>
10108 pts/1 Z+ 0:00 [twinkle] <defunct>
10130 pts/1 Z+ 0:00 [twinkle] <defunct>
我試圖設置 信號(SIGCHLD,SIG_IGN); 但沒有成功。 其實我覺得孩子的過程在閃爍之前就消失了。
從類似的命令行運行閃爍:
twinkle --immediate --call 100
不作殭屍 - 閃爍關閉正常。 我在那裏失蹤了什麼?
僅有旁註:IIRC,execl'後'代碼將*不*被除非'execl'產生錯誤執行。 – Jite
@Jite,正確。 exit(0);'_disappears_如果'execl()'成功。 – hmjd