だから私はいくつかのPHPスクリプトをコマンドラインから実行していて、それらを実行したくない。
私は走った
$ ps aux | grep php
$ Sudo kill 8754
$ Sudo kill 8767
そして走った
$ ps aux | grep php
プロセスが終了したことを確認するためにもう一度、この種の出力を得ました:
jon 8754 0.4 53.5 3044256 2205204 ? T 10:34 0:15 php awesome_script.php
jon 8767 0.4 53.5 3044256 2205204 ? T 10:34 0:15 php awesome_script.php
jon 12275 0.0 0.0 4156 892 pts/1 S+ 11:27 0:00 grep --color=auto php
私は Tの意味を調べました 状態の列を調べて、それが停止を意味していることを発見しましたが、プロセスが何をしているのか理解できません。
PHPで 独自のシグナル処理を作成 できることは知っていますが、私はそれを行っていないので、PHPが SIGTERMシグナル)を受け取ったとき それは何をするためのものか?
停止したプロセスは(もしあれば)何をしていますか?
これは、プロセスがSTOP
シグナルを受信し、CONT
シグナルを受信するまで何もしないことを意味します。
STOP
信号の最も一般的なソースは、プロセスがフォアグラウンドにあるときにユーザーが^z
を押すことです。その後、CONT
を送信する一般的な方法は、fg
またはbg
を入力して、それぞれフォアグラウンドとバックグラウンドでプロセスを続行します。
STOP
をプロセスに送信する別の方法は、kill -STOP $pid
です。同様に、CONT
は、kill -CONT $pid
を使用してプロセスに送信できます。
TERM
シグナルをプロセスに送信したので、それらを終了させたいと思います。そのためには、プロセスはCONT
シグナルを受信する必要があります。ターミナルウィンドウでkill -CONT 8754 8767
と入力すると、これらを送信できます。
Linux/Unixで停止したプロセスは、停止信号(SIGSTOP
/SIGTSTP
)を受け取ったプロセス/タスクであり、カーネルが停止しているため、処理を実行しないようにカーネルに指示します。 SIGCONT
シグナルが送信された場合にのみ、実行を再開します。
基本的に停止されたプロセスは、中断されたプロセスがカーネルからのウェイクアップ状態を待つのと同様に、カーネルからの継続シグナルを待ちます。
画像クレジット: polytechnique.fr
Linuxカーネルの各プロセスはtask_struct
データ構造で表され、各task
ベクトルはすべてのtask_struct
へのポインターの配列で構成されます。システム内のプロセスまたはタスクを記述します(unrunnable
、runnable
またはstopped
)。詳細は Processes および Linux Data Structures )を参照してください。
参照: Linuxカーネル:プロセス管理