子プロセスからトゥインクル コマンド ラインを実行しようとしています。たとえば、次のようにします。
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>
signal(SIGCHLD, SIG_IGN); を設定しようとしました。しかし、成功しませんでした。実際には、twinkle が終了する前に、子プロセスが終了したと思います。
次のようにコマンドラインからトゥインクルを実行します。
twinkle --immediate --call 100
ゾンビにはなりません - トゥインクルは適切に閉じます。私がそこに欠けているものは何ですか?