如何暂停和恢复流程


143

在bash终端中,我可以按Control+ Z来暂停任何正在运行的进程...然后我可以键入fg以恢复该进程。

如果我只有PID,是否可以暂停进程?如果是这样,我应该使用什么命令?

我正在寻找类似的东西:

suspend-process $PID_OF_PROCESS

然后用

resume-process $PID_OF_PROCESS

Answers:


171

您可以kill用来停止该过程。

要“礼貌”地停止该过程(正常使用时请首选此方法),请发送SIGTSTP:

kill -TSTP [pid]

对于“硬”停止,请发送SIGSTOP:

kill -STOP [pid]

请注意,如果您尝试通过PID停止的进程在shell的作业表中,则该进程可能在该表中保持可见状态,但会终止,直到fg再次执行该进程为止。

要恢复执行过程,向SIGCONT发送了:

kill -CONT [pid]

25
除非有其他原因,否则我会更喜欢SIGTSTP而不是SIGSTOP,因为某些应用程序确实专门处理SIGTSTP。例如,如果scp显示进度条,则SIGTSTP将使它在挂起之前清理终端模式,但是如果发送SIGSTOP,则它没有机会这样做。
短暂

3
@ephemient我尝试了SIGTSTP,我明白了您说的关于清理终端的内容。感谢您对SIGTSTP的解释,对学习新事物很有帮助:)
Steve Burdine 2010年

2
注意,还可以使用%符号,然后使用作业号(可以通过运行找到一个)来引用[pid]值jobs。所以你会去:kill -TSTP %1
卡罗


43

您应该kill为此使用命令。

要更详细-您必须指定正确的信号,即

$ kill -TSTP $PID_OF_PROCESS

用于暂停该过程,以及

$ kill -CONT $PID_OF_PROCESS

恢复它。记录在这里


我不知道是什么历史原因导致此答案获得的选票减少?答案是几乎相同的,这一个是先....
通配符

7
@Wildcard,当我创建答案时,我有点着急,因此,它基本上只是包含了直到kill -TSTP(即如何暂停)的第一部分。1/2年后,即2011年,我重新审视了我的答案,并注意到答案不完整。因此,我对其进行了编辑并添加了kill -CONT零件。与史蒂夫的回答相比,这应该可以解释投票的差异。
maxschlepzig
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.