終了可能なタスクを一覧表示するには?

終了可能なタスクを一覧表示するには?

psのマンページに記載されているようにSTATUS値が「D」のプロセスは、「中断されない省電力モード(通常はIO)」を意味します。

また、以下の内容を読みました。ここではTASK_INTERRUPTIBLEを使用する必要があります。そうしないと、カーネルスレッドはシグナルを受信できず、(1)ユーザースペースでスレッドを終了したり、カーネルでkthread_stop()を使用したりできません。

上記の内容が十分でない場合は、以下をお読みください。Dのプロセスステータス(STAT)は、プロセスが「無中断スリープ」状態にあることを示します。実際の世界では、これは通常I / Oを待っており、I / O操作が完了するまで死ぬことを含む何もできないかどうかを意味します。

IOを待つプロセスを実行するとしましょう。

[root@mpinode02 Distros]#  find / -mmin +10 > /dev/null &
[1] 15592

次に、ステータスとプロセスを見てください。

[root@mpinode02 Distros]# ps -C find -ostat,comm,wchan
STAT COMMAND         WCHAN
D    find            sleep_on_buffer

さて、このプロセスが実際に中断できないことを見てみましょう。

[root@mpinode02 Distros]# kill 15592

[1]+  Terminated               time find / -mmin +10 > /dev/null

ご覧のとおり、現実の世界ではDを含むプロセスが終了します。 psのマニュアルページは古いですか?

実際に新しい状態があることを確認しました。 使命は殺すことができるしかし、どのようにリストするのか知りたいです。終了可能なタスクを一覧表示または識別する方法を知っていますか?

答え1

信号と競争条件のある素晴らしい世界へようこそ。

ps コマンドを複数回実行すると、コマンドの実行時に D 状態ではないことがよくあります。 findはディスクを待つのにほとんどの時間を費やしますが、ディスク上のすべての時間を費やすわけではありません。そうでなければ、キル信号が送られる。

F絶対あなたが欲しいものをしてください。 ps はすべてのコマンドを繰り返すことで、その時点でどのコマンドが終了可能か不可能かを知らせることができます。しかし、人を殺し始めると、リストは異なります。 kill(まあ、killを意味するカーネル)がすぐに信号を送信できなくても、できるだけ早く信号を送信します。したがって、「D」状態は「まったく終了できません」を意味するのではなく、「このクロックサイクルでは終了できません」を意味します。

関連情報