10

Поэтому у меня было несколько 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, что он делает?

Что делает остановленный процесс (если что-нибудь)?

2 ответа2

14

Это означает, что процесс получил сигнал STOP и ничего не будет делать, пока не получит сигнал CONT , даже не прекратит работу.

Наиболее распространенным источником сигналов STOP является нажатие пользователем клавиши ^z когда процесс находится на переднем плане, а общий способ отправить CONT впоследствии - это набрать fg или bg которые продолжают процесс на переднем плане и фоне соответственно.

Другой способ отправить STOP процессу - kill -STOP $pid . Аналогично, CONT можно отправить процессу с помощью kill -CONT $pid .

Поскольку вы отправили сигналы TERM процессам, я предполагаю, что вы хотите, чтобы они прекратились. Для этого процессы должны получать сигналы CONT . Вы можете отправить их, набрав kill -CONT 8754 8767 в окне терминала.

3

Остановленный процесс в Linux/Unix - это процесс / задача, которая получила сигнал приостановки (SIGSTOP / SIGTSTP), который сообщает ядру, чтобы он не выполнял на нем никакой обработки, поскольку он был остановлен, и он может возобновить свое выполнение только в том случае, если он был отправлен Сигнал SIGCONT .

В основном остановленный процесс ожидает сигнала продолжения от ядра, точно так же, как приостановленный процесс ожидает условия активации от ядра.

Состояние ядра Linux: готово, работает, остановлено, приостановлено, отслежено, зомби

Изображение предоставлено: polytechnique.fr


Каждый процесс в ядре Linux представлен структурой данных task_struct а каждый вектор task состоит из массива указателей на каждую task_struct . который описывает процесс или задачу в системе (либо его unrunnable runnable или stopped См. Процессы и структуры данных Linux) для более подробной информации.

Смотрите также: Ядро Linux: Управление процессами

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .