如何暂停和恢复进程

Ste*_*fan 178 command-line bash job-control

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

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

我正在寻找类似的东西:

suspend-process $PID_OF_PROCESS
Run Code Online (Sandbox Code Playgroud)

然后恢复它

resume-process $PID_OF_PROCESS
Run Code Online (Sandbox Code Playgroud)

Ste*_*ine 213

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

对于进程的“礼貌”停止(更喜欢在正常使用中使用),发送 SIGTSTP:

kill -TSTP [pid]
Run Code Online (Sandbox Code Playgroud)

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

kill -STOP [pid]
Run Code Online (Sandbox Code Playgroud)

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

要恢复进程的执行,发送 SIGCONT:

kill -CONT [pid]
Run Code Online (Sandbox Code Playgroud)

  • 除非有其他原因,否则我更喜欢 SIGTSTP 而不是 SIGSTOP,因为有些应用程序会专门处理 SIGTSTP。例如,如果 scp 显示进度条,SIGTSTP 会使其在挂起之前清理终端模式,但如果您发送 SIGSTOP,它就没有机会这样做。 (29认同)
  • @ephemient 我试过 SIGTSTP,我看到了你所说的清理终端的内容。感谢 SIGTSTP 的解释,alawys 很高兴学习新事物:) (3认同)
  • 还需要注意的是,您可以通过使用 % 符号和作业编号(您可以通过运行“jobs”找到的编号)来引用 [pid] 值。所以你会去:`kill -TSTP %1` (3认同)
  • 另请参阅:[http://stackoverflow.com/questions/11886812/whats-the-difference- Between-sigstop-and-sigtstp#11888074] (2认同)

max*_*zig 56

您应该kill为此使用该命令。

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

$ kill -TSTP $PID_OF_PROCESS
Run Code Online (Sandbox Code Playgroud)

暂停进程和

$ kill -CONT $PID_OF_PROCESS
Run Code Online (Sandbox Code Playgroud)

恢复它。记录在这里

  • @Wildcard,当我创建答案时,我有点着急,因此,它基本上只包含第一部分,直到`kill -TSTP`(即如何挂起)。1/2 年后,即 2011 年,我重新审视了我的答案并注意到它的不完整。因此,我编辑了它并添加了 `kill -CONT` 部分。与史蒂夫的回答相比,这应该可以解释投票的差异。 (11认同)
  • 我想知道是什么历史事故导致这个答案获得了更少的选票?答案几乎相同,这个是第一个...... (2认同)