Як призупинити та відновити процеси


143

У терміналі bash я можу натиснути Control+, Zщоб призупинити будь-який запущений процес ... тоді я можу набрати, fgщоб відновити процес.

Чи можна призупинити процес, якщо у мене тільки PID? І якщо так, то яку команду я повинен використовувати?

Я шукаю щось на зразок:

suspend-process $PID_OF_PROCESS

а потім відновити його

resume-process $PID_OF_PROCESS

Відповіді:


172

Ви можете використовувати killдля зупинки процесу.

Щоб "ввічливо" зупинити процес (віддайте перевагу цьому для звичайного використання), надішліть SIGTSTP:

kill -TSTP [pid]

Для "жорсткої" зупинки надішліть SIGSTOP:

kill -STOP [pid]

Зауважте, що якщо процес, який ви намагаєтеся зупинити за допомогою PID, знаходиться в таблиці завдань вашої оболонки, він може залишатися там видимим, але припиняється, доки процес fgзнову не стане .

Щоб відновити виконання процесу, надіслано SIGCONT:

kill -CONT [pid]

25
Якщо немає інших причин, я вважаю за краще SIGTSTP над SIGSTOP, оскільки деякі програми спеціально обробляють SIGTSTP. Наприклад, якщо scp показує панель прогресу, SIGTSTP призведе до очищення термінального режиму до призупинення, але якщо ви надішлете SIGSTOP, у нього не буде шансів.
ефемія

3
@ephemient Я спробував SIGTSTP, я побачив, що ви говорите про його очищення терміналу. Дякуємо за пояснення SIGTSTP, добре заучувати нові речі :)
Стів Бурдін

2
Також корисно зазначити, що ви можете посилатися на значення [pid], використовуючи символ%, а потім номер завдання (той, який ви можете знайти, запустивши jobs). Отже, ви підете:kill -TSTP %1
Karoh


43

Для цього слід використовувати killкоманду.

Щоб бути більш багатослівним - потрібно вказати правильний сигнал , тобто

$ kill -TSTP $PID_OF_PROCESS

для призупинення процесу та

$ kill -CONT $PID_OF_PROCESS

для його відновлення. Задокументовано тут .


Цікаво, яка випадковість історії призвела до того, що ця відповідь отримала менше голосів? Відповіді майже однакові, і цей прийшов першим ....
Wildcard

7
@Wildcard, коли я створив відповідь, я трохи поспішав, таким чином, він в основному містив першу частину до kill -TSTP(тобто як призупинити). Через 1/2 року, тобто в 2011 році, я переглянув свою відповідь і помітив її незавершеність. Таким чином, я його відредагував і додав також kill -CONTчастину. Це повинно пояснити різницю голосів порівняно з відповіддю Стіва.
maxschlepzig
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.