如何在 Linux 中恢复已停止的工作?

Bob*_*bby 396 linux sh job-control

如何在 Linux 中恢复已停止的工作?我在使用 emacs 时不小心按了 ctrl-z,这让我回到了控制台。当我输入“jobs”时我可以看到它

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp
Run Code Online (Sandbox Code Playgroud)

Ilk*_*kka 461

该命令fg是您要使用的。如果有多个停止的作业,您也可以为其指定作业编号。

  • 作为参考, fg 是“前景”。您还可以使用“bg”在后台继续工作。 (69认同)
  • _你也可以给它一个工作编号_ --> 简单地执行 `fg 1` 是行不通的,语法是 `fg %1` (4认同)

Maj*_*nko 307

Linux中一般的作业控制命令有:

  • 工作- 列出当前工作
  • fg - 恢复队列中的下一个作业
  • fg %[number] - 恢复工作 [number]
  • bg - 将队列中的下一个作业推入后台
  • bg %[number] - 将作业 [number] 推送到后台
  • kill %[number] - 杀死编号为 [number] 的作业
  • kill -[signal] %[number] - 将信号 [signal] 发送到作业编号 [number]
  • disown %[number] - 否认进程(不再拥有终端),因此即使在关闭终端后命令也将有效。

这几乎就是所有这些。请注意命令中作业编号前面的 % - 这告诉 kill 您正在谈论作业而不是进程。

  • 我避免使用“kill %1”,因为将它错误地输入为“kill 1”真的很糟糕:) (45认同)
  • @barrycarter 这是真的。我通常会做一个 `fg` 和一个 `Ctrl-C` ;) (7认同)
  • @barry:这就是为什么 Upstart 中的 init 默认忽略 SIG{TERM,KILL} 的原因。 (7认同)
  • 而且,当然,“永远不要以 root 身份运行”;) (7认同)

小智 51

你也可以输入%<process_name>; 即,您在 emacs 中按 Ctrl-Z,然后您可以%emacs在控制台中键入并将其带回前台。


use*_*686 34

只是为了添加其他答案,如果您指定工作编号,bash可以让您跳过fg

例如,这些是等效的并恢复最新的工作:

%
%%
fg
fg %
Run Code Online (Sandbox Code Playgroud)

这些简历工作#4:

%4
fg 4
Run Code Online (Sandbox Code Playgroud)

  • `%` 很棒,谢谢!作为一个打字员,我发现 `fg` 很烦人(同一个手指)。但是,`cd` 也是如此。 (4认同)
  • 虽然这有点酷,但我仍然发现输入 `fg` 比输入 `%` 更容易。 (3认同)

mah*_*off 26

如果您没有从当前终端启动它,请使用ps aux | grep <process name>查找进程号 (pid),然后使用以下命令恢复它:

kill -SIGCONT <pid>
Run Code Online (Sandbox Code Playgroud)

(尽管名称如此,但kill它只是一个向进程发送信号的工具,允许进程相互通信。“终止信号”只是众多标准信号中的一个。)

额外提示:用 包裹进程名称的第一个字符[]以防止grep命令本身出现在结果中。例如找到emacs进程,使用ps aux | grep [e]macs

  • 如果您否认已停止的进程,这也适用 (4认同)