Поэтому у меня было несколько 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, что он делает?
Что делает остановленный процесс (если что-нибудь)?
источник
kill $pid
например,), пока он был остановлен, он затем (запоздало) ответит на этот СРОК и прекратит работу.kill 8754
что должно привести к завершению процесса, верно? Знаете ли вы, в каком состоянии находится процесс, пока он подходит к завершению? Учитывая, что процесс перешел в состояние STOP, как если бы он получил сигнал STOPkill -STOP 8754
, может ли это произойти, если ему был послан сигнал TERM?TERM
сигнала, пока не будет продолжен. Он прекратит работу немедленно, если получитKILL
сигнал, даже если он остановлен. Я предполагаю, что процесс будет в состоянии Run, когда он завершится. Я не очень знаком с PHP и не знаю, как сказать, почему процесс остановился, извините. Однако, как правило, процессы не останавливаются, а завершаются при полученииTERM
.Остановленный процесс в Linux / Unix - это процесс / задача, получивший сигнал приостановки (
SIGSTOP
/SIGTSTP
), который указывает ядру не выполнять на нем никакой обработки, поскольку он был остановлен, и возобновить его выполнение можно только в том случае, если ему отправленSIGCONT
сигнал.В основном остановленный процесс ожидает сигнала продолжения от ядра, точно так же, как приостановленный процесс ожидает состояние пробуждения от ядра.
Изображение предоставлено: polytechnique.fr
Каждый процесс в ядре Linux представлен
task_struct
структурой данных, и каждыйtask
вектор состоит из массива указателей на каждыйtask_struct
. который описывает процесс или задачу в системе (или этоunrunnable
,runnable
илиstopped
). См. Процессы и структуры данных Linux ) для более подробной информации.Смотрите также: Ядро Linux: Управление процессами
источник