web-dev-qa-db-ja.com

Linuxで停止したプロセスとは何ですか?

だから私はいくつかの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シグナル)を受け取ったとき それは何をするためのものか?

停止したプロセスは(もしあれば)何をしていますか?

12
Jon

これは、プロセスがSTOPシグナルを受信し、CONTシグナルを受信するまで何もしないことを意味します。

STOP信号の最も一般的なソースは、プロセスがフォアグラウンドにあるときにユーザーが^zを押すことです。その後、CONTを送信する一般的な方法は、fgまたはbgを入力して、それぞれフォアグラウンドとバックグラウンドでプロセスを続行します。

STOPをプロセスに送信する別の方法は、kill -STOP $pidです。同様に、CONTは、kill -CONT $pidを使用してプロセスに送信できます。

TERMシグナルをプロセスに送信したので、それらを終了させたいと思います。そのためには、プロセスはCONTシグナルを受信する必要があります。ターミナルウィンドウでkill -CONT 8754 8767と入力すると、これらを送信できます。

15
Eroen

Linux/Unixで停止したプロセスは、停止信号(SIGSTOP/SIGTSTP)を受け取ったプロセス/タスクであり、カーネルが停止しているため、処理を実行しないようにカーネルに指示します。 SIGCONTシグナルが送信された場合にのみ、実行を再開します。

基本的に停止されたプロセスは、中断されたプロセスがカーネルからのウェイクアップ状態を待つのと同様に、カーネルからの継続シグナルを待ちます。

Linux kernel process states: Ready, Running, Stopped, Suspended, Traced, Zombie

画像クレジット: polytechnique.fr


Linuxカーネルの各プロセスはtask_structデータ構造で表され、各taskベクトルはすべてのtask_structへのポインターの配列で構成されます。システム内のプロセスまたはタスクを記述します(unrunnablerunnableまたはstopped)。詳細は Processes および Linux Data Structures )を参照してください。

参照: Linuxカーネル:プロセス管理

4
kenorb