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

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

для возобновления этого. Документировано здесь .

maxschlepzig
источник
Интересно, какая случайность истории привела к тому, что этот ответ получил меньше голосов? Ответы почти одинаковы, и этот пришел первым ...
Wildcard
7
@Wildcard, когда я создавал ответ, я немного спешил, таким образом, он в основном просто содержал первую часть до kill -TSTP(то есть, как приостановить). Спустя 1/2 года, то есть в 2011 году, я пересмотрел свой ответ и заметил его незавершенность. Таким образом, я отредактировал это и добавил также kill -CONTчасть. Это должно объяснить разницу в голосах по сравнению с ответом Стива.
maxschlepzig