0

clone() で CLONE_THREAD オプションを使用して生成されたスレッドがあるテスト ケースがあります。しかし、スレッドがカーネル空間で待機している場合 (futex_wait など)、kill は実際にスレッドに影響しますか?

上記の方法で作成されたスレッドを強制終了しようとしましたが、SIGKILL が同じプロセスに送信されると、プロセス全体が強制終了されます。

4

1 に答える 1

1

SIGKILL 常にターゲットプロセスを強制終了します。これを回避する方法はありません。ブロックできず、無視できず、キャッチできません。

別のシグナル (SIGUSR1またはSIGHUPなどSIGRTMIN) を送信して、呼び出すシグナル ハンドラーをインストールすることもできますpthread_exit(ただし、この関数は async-signal-safe ではないため、シグナル ハンドラーが別の async-signal-unsafe を中断しないようにする必要があります)。関数) またはキャンセル ( pthread_cancel) を使用して、ブロックされたスレッドを停止します。

これは、通常のブロック操作 (パイプやソケットからのデータを待機するなど) では機能するはずですが、スレッドが中断できないスリープ状態にある場合 (ひどく傷ついた CD や故障したハードディスクから読み取ろうとするなど) は役に立ちません。

于 2011-09-11T21:31:34.470 に答える