学校向けのプロジェクトがあり、助けが必要です。私はCで働いており、サーバーとクライアントがあります。サーバーでは、フォークを使用してクライアントごとに新しいプロセスを作成します。私の質問は、CTRL + Cでサーバーを閉じる場合、残りのすべてのプロセスを強制終了するにはどうすればよいですか?ありがとう
4 に答える
sigterm
それらが作成された後、そして終了するときに、それらに信号を送るか、またはそれらにそれらのpidを保存することができsigkill
ます。
あなたはシェルを通してそれをすることができます-killall
あなたがLinuxの下で探しているものです。
プロセスの代わりにスレッドを使用して(プロジェクトの詳細は何と言っていますか?)、変数を介して通信することができます。
これはシェルであなたのためにそれを行います:
killall -15 <process name>
Cでは、次のことを試すことができます。
kill(0, SIGKILL)
メインサーバープロセスのSIGINT
シグナルハンドラーで、プロセスグループ内のすべてのプロセスを強制終了します。プロセスグループには、その子が含まれている必要があります。
これは実装定義にすることをお勧めします。フォークの PID を保持し、 CTRL+C がサーバーに送信するシグナル(POSIX では SIGINT) をフックし、OS が推奨する方法 ( POSIX 環境ではkill ) を使用してそれらを強制終了する必要があります。
プロセスを単独で強制終了しても、子プロセスは強制終了されません。
特定のグループのすべてのプロセスにシグナルを受信させたい場合は、プロセス グループにシグナルを送信する必要がありますkill -9 -parentpid
。そうしないと、オーファンは にリンクされますinit
。