Как приостановить и возобновить процессы


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снова «d».

Чтобы возобновить выполнение процесса, отправили SIGCONT:

kill -CONT [pid]

25
Если нет других причин, я бы предпочел SIGTSTP, а не SIGSTOP, так как некоторые приложения обрабатывают SIGTSTP специально. Например, если scp показывает индикатор выполнения, SIGTSTP заставит его очистить режим терминала перед приостановкой, но если вы отправите SIGSTOP, у него не будет возможности сделать это.
Эфимент

3
@ephemient Я попробовал SIGTSTP, я видел, что вы говорили об этом, убирая терминал. Спасибо за объяснение SIGTSTP, алаву приятно узнавать что-то новое :)
Стив Бурдин

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

Смотрите также: [ stackoverflow.com/questions/11886812/…
AAAfarmclub

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.