Що таке зупинений процес у 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.