プロセスを監視するためにいくつかの機能をテストしており、決定された「遅延」で長いコアダンプをエミュレートする必要があります(たとえば、30秒間「コアをダンプ」するプロセスを作成する必要があります)。コアのダンプが中断できないスリープ状態にあるため、SIGKILLで強制終了できないことに気付きましたが、コアダンプを受信するパイプコマンドを使用してこの動作をエミュレートしようとすると、そのようなプロセスを簡単に強制終了できます。それで、(psのそのようなステータスで)中断できないスリープに入り、SIGKILLを無視するようにするプロセスを作成する方法はありますか?
2662 次
4 に答える
12
最も適切な方法は、フリーザーcgroupを使用することです。FROZEN cgroup状態の場合、プロセスを中断できないスリープ状態にします。
# mkdir /sys/fs/cgroup/freezer
# mount -t cgroup -ofreezer freezer /sys/fs/cgroup/freezer
# mkdir /sys/fs/cgroup/freezer/frozen
# echo FROZEN > /sys/fs/cgroup/freezer/frozen/freezer.state
# echo `pidof you_process` > /sys/fs/cgroup/freezer/frozen/tasks
再び割り込み可能なスリープに戻すには、cgroupの状態をTHAWEDに変更するだけです。
于 2014-03-31T06:37:11.330 に答える
0
これを行うための信頼できる(複雑な場合)方法の1つは、NFSディレクトリをハードマウントしてから、NFSサーバーを停止することです。
于 2013-02-16T09:44:30.877 に答える
0
プロセスを割り込み可能なスリープモードにするには、カーネルコードに入る必要があります。とスピンロックの機能を使用するwake_up_interruptible
と、この状態を実現できます。
于 2012-10-10T05:54:39.513 に答える
-4
SIGKILLをブロックする方法はありません。それが目的です。プロセスを取り除くための大きなハンマーアプローチ。SIGKILLがブロックできる唯一の方法は、プロセスがカーネルでロックされている場合です。
于 2012-09-28T15:58:29.047 に答える