私はcとプログラミングに非常に慣れていないので、助けが必要です。Linux(cygwin)のcでは、終了時にすべての子プロセスを削除する必要があります。私は他の同様の質問を見ましたが、それを機能させることができません。私はもう試した-
atexit(killzombies); //in parent process
void killzombies(void)
{
printf("works");
kill(0, SIGTERM);
printf("works");
if (waitpid(-1, SIGCHLD, WNOHANG) < 0)
printf("works");
}
どういうわけか、「作品」は今までに印刷されません。ctrl+cを押して終了します。
また、私は試しました-
prctl(PR_SET_PDEATHSIG, SIGHUP); //in child process
signal(SIGHUP, killMe);
void killMe()
{
printf("works");
exit(1);
}
しかし、私はcygwinを使用しているので、私がcygwinを使用すると#include <sys/prctl.h>
、ファイルまたはディレクトリが見つからないと言われ、インストールするパッケージがわかりません。また、私のprctl()
機能が機能する場合、それはすべてのゾンビを殺しますか?
私のプログラムはクライアントサーバーであり、各クライアントを処理するためのサーバーforks()です。サーバーがシャットダウンしたときにゾンビを残さないと思います。