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

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

我正在寻找类似的东西:

suspend-process $PID_OF_PROCESS


然后使用

resume-process $PID_OF_PROCESS


#1 楼

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

要对该过程进行“礼貌”的停止(正常使用时建议使用此方法),请发送SIGTSTP:

kill -TSTP [pid]


要进行“硬”停止,请发送SIGSTOP:

kill -STOP [pid]


请注意,如果您要通过PID停止的进程在外壳的作业表中,它可能在那里仍然可见,但是终止了,直到再次执行该过程。

要恢复执行该过程,请发送SIGCONT:

kill -CONT [pid]


评论


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

–短暂
2010-09-15 21:55

@ephemient我尝试了SIGTSTP,我明白了您说的关于清理终端的内容。感谢您对SIGTSTP的解释,学习新事物非常有用:)

–史蒂夫·伯丁(Steve Burdine)
2010-09-15 22:38

注意,还可以使用%符号然后使用作业号(可以通过运行作业找到一个)来引用[pid]值,这也很有用。所以你会去:杀死-TSTP%1

–卡鲁
16年5月2日在22:58

另请参阅:[stackoverflow.com/questions/11886812/…

–AAAfarmclub
16年12月27日在8:15

#2 楼

您应该为此使用kill命令。

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

$ kill -TSTP $PID_OF_PROCESS


暂停该过程和

$ kill -CONT $PID_OF_PROCESS


恢复该过程。在此处记录。

评论


我想知道是什么历史偶然性导致此答案获得的选票减少?答案几乎相同,这个是第一位。

–通配符
16年8月16日在3:08

@Wildcard,当我创建答案时,我有点着急,因此,它基本上只包含杀死-TSTP的第一部分(即,如何暂停)。 1/2年后,即2011年,我重新审视了我的答案,并注意到答案不完整。因此,我对其进行了编辑,还添加了kill -CONT部分。与史蒂夫的回答相比,这应该可以解释投票的差异。

–maxschlepzig
16年8月16日在7:25