3

学校向けのプロジェクトがあり、助けが必要です。私はCで働いており、サーバーとクライアントがあります。サーバーでは、フォークを使用してクライアントごとに新しいプロセスを作成します。私の質問は、CTRL + Cでサーバーを閉じる場合、残りのすべてのプロセスを強制終了するにはどうすればよいですか?ありがとう

4

4 に答える 4

2

sigtermそれらが作成された後、そして終了するときに、それらに信号を送るか、またはそれらにそれらのpidを保存することができsigkillます。

あなたはシェルを通してそれをすることができます-killallあなたがLinuxの下で探しているものです。

プロセスの代わりにスレッドを使用して(プロジェクトの詳細は何と言っていますか?)、変数を介して通信することができます。

于 2013-01-28T08:28:12.947 に答える
1

これはシェルであなたのためにそれを行います:

killall -15 <process name>

Cでは、次のことを試すことができます。

kill(0, SIGKILL)

メインサーバープロセスのSIGINTシグナルハンドラーで、プロセスグループ内のすべてのプロセスを強制終了します。プロセスグループには、その子が含まれている必要があります。

于 2013-01-28T08:26:29.553 に答える
0

これは実装定義にすることをお勧めします。フォークの PID を保持し、 CTRL+C がサーバーに送信するシグナル(POSIX では SIGINT) をフックし、OS が推奨する方法 ( POSIX 環境ではkill ) を使用してそれらを強制終了する必要があります。

于 2013-01-28T08:32:19.820 に答える
0

プロセスを単独で強制終了しても、子プロセスは強制終了されません。

特定のグループのすべてのプロセスにシグナルを受信させたい場合は、プロセス グループにシグナルを送信する必要がありますkill -9 -parentpid。そうしないと、オーファンは にリンクされますinit

于 2013-01-28T08:47:37.483 に答える