これらは、Packet Receiverプロセスの個々のスレッドです。個々のスレッドを強制終了する方法はありますか? Linuxは、プロセス内の特定のスレッドを停止または停止信号を送信できる特定のコマンドを提供していますか?
大きなプロセスから個々のスレッドを強制終了することは、一般的に非常に危険です。そのスレッドは:
一般に、アプリケーション自体による管理と同期の外では、個々のスレッドを強制終了することは意味のあることではありません。
Cプログラムで tgkill(2) またはtkill
を使用する場合があります( syscall(2) を使用する必要があります)したくない。プログラム内から pthread_kill(3) を使用できます。これはほとんど役に立ちません。
(私はtgkill
またはtkill
-SIGKILL
またはSIGTERM
を使用すると、どのような影響があるかを正確に知りません-スレッド上で)
pthreads(7) ライブラリは低レベルのものを使用します(一部の signal(7) -sおよび futex(7) -sなどを含みます)。 ..; nptl(7) )も参照してください。また、(tkill
またはtgkill
を使用して)個別のスレッドをraw killした場合、プロセスが間違っている可能性があります状態(したがって 未定義の動作 )は、一部の内部不変式が壊れているためです。
したがって、パケット受信プログラムのドキュメントを調べて、他の方法を見つけてください。 free software の場合、そのソースコードを調べて改善します。
signal(7) および signal-safety(7) をもっと注意深く読んでください。シグナルはプロセスに送信され( kill(2) によって)、スレッドで処理されることを意図しています。
そして実際には、シグナルとスレッドはうまく結合しません。 pthread tutorial を読んでください。
マルチスレッドプログラムをコーディングするとき(そしてSIGTERM
のようなexternalシグナルを処理したいとき)の一般的なトリックは、 pipe(7)を使用することです 独自のプロセスに poll(2) 他のスレッドのパイプ(Linux固有の signalfd(2) )とシグナルハンドラーを考慮 write(2) -バイトまたはそれらのいくつかをパイプに挿入します。そのよく知られたトリックは Qtドキュメント でよく説明されています(そして、Qtがなくても自分のプログラムでそれを使用できます)。