Що таке зупинений процес у Linux?


12

Тож у мене були декілька скриптів 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, що це робить?

Що робить зупинений процес (якщо що)?

Відповіді:


15

Це означає, що процес отримав STOPсигнал, і він нічого не зробить, поки не отримає CONTсигнал, навіть не припиниться.

Найпоширенішим джерелом STOPсигналів є натискання користувачем, ^zколи процес знаходиться на передньому плані, а загальним способом надсилання CONTпісля цього є набір тексту fgабо bgпродовження процесу відповідно на передньому плані та на задньому плані відповідно.

Ще один спосіб надіслати STOPпроцес - це kill -STOP $pid. Так само CONTможе бути надісланий процес із kill -CONT $pid.

Оскільки ви надсилали TERMсигнали процесам, я вважаю, що ви хочете, щоб вони припинилися. Щоб це сталося, процеси повинні приймати CONTсигнали. Ви можете надіслати їх, ввівши kill -CONT 8754 8767у вікно терміналу.


Чи дозволить передача сигналу CONT запускати сценарій до його завершення? Або це призведе до негайного припинення роботи сценарію?
Джон

Процес продовжує те, що робив (до STOP) після отримання CONT. Якщо ви надіслали TERM ( kill $pidнаприклад,), поки він був зупинений, він потім (запізніло) відповість на цей TERM і припинить.
Ероен

Гм, значить, я надіслав термін, запустивши, kill 8754який повинен спричинити процес врешті-решт, правильно? Чи знаєте ви, в якому стані буде процес, поки він закінчується? З огляду на те, що процес перейшов у стан STOP, як би він отримав сигнал STOP kill -STOP 8754, чи може це трапитися також, якщо йому буде надісланий сигнал TERM?
Джон

Зупинений процес не припиняється через TERMсигнал, поки він не буде продовжений. Він припиниться негайно, якщо отримає KILLсигнал, навіть при зупинці. Я припускаю, що процес буде у стані запуску, коли він закінчиться. Я не дуже знайомий з PHP, і не знаю, як сказати, чому процес зупинився, вибачте. Однак, як правило, процеси не припиняються, а закінчуються, коли вони отримують TERM.
Eroen

4

Зупинений процес в Linux / Unix - це процес / завдання, який отримав сигнал призупинення ( SIGSTOP/ SIGTSTP), який сповіщає ядро ​​не виконувати жодну обробку на ньому так, як він був зупинений, і його відновити виконання може лише тоді, коли він буде надісланий SIGCONTсигналом.

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

Процес ядра Linux констатує: готовий, запущений, зупинений, призупинений, простежений, зомбі

Графічні зображення: polytechnique.fr


Кожен процес у ядрі Linux представлений task_structструктурою даних, і кожен taskвектор складається з масиву покажчиків на кожного task_struct. який описує процес або завдання в системі (або це unrunnable, runnableабо stopped). Докладніше див. У розділі: Процеси та структури даних Linux ).

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


@Jus Дякую за звіт, я його виправив.
kenorb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.