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


342

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

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp

对于Vim来说,这实际上是一个相当正常的工作流程,如果您想将命令保留在bash历史记录中,则您可以Ctrl-z键入命令然后继续。显然,您可以通过:!ed命令在不离开Vim的情况下运行命令
icc97 '18

Answers:


381

该命令fg是您要使用的命令。如果有多个停止的作业,也可以给它一个作业号。


59
供参考,fg是“前景”。您也可以使用“ bg”在后台继续作业。
Sirex

260

Linux中的常规作业控制命令为:

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

几乎就是全部。请注意命令中作业编号的%infront-这是杀死您所谈论的作业而不是进程的信息。


30
我避免使用“ kill%1”,因为将其误认为是“ kill 1”真的很糟糕:)
barrycarter 2011年

5
@barrycarter这是真的。我通常会做一个fg和一个Ctrl-C;)
Majenko 2011年

6
@barry:这就是为什么Upstart中的init默认忽略SIG {TERM,KILL}的原因。
Hello71 2011年

7
而且,当然,“从不根源运行”;)
barrycarter 2011年

47

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


很高兴知道
ZAD-Man

33

bash仅用于添加其他答案,fg如果您指定职位编号,则可以跳过。

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

%
%%
fg
fg %

这些恢复工作#4:

%4
fg 4

2
虽然这很酷,但我仍然发现它fg比容易%
rr-

3
%太棒了,谢谢!作为触摸打字员,我觉得fg很烦(同一根手指)。但是,也是如此cd
Gauthier 2015年

您可以使用bg %或只是在后台启动它% &
通配符

以我为例,当我尝试使用fg时,我看到停止的进程出现并迅速消失,仅<fg%>成功恢复了它。
Lefi Tarik

20

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

kill -SIGCONT <pid>

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

温馨提示:进程名称的第一个字符带有,[]以防止grep命令本身出现在结果中。例如寻找emacs过程,使用ps aux | grep [e]macs


2
如果您
放弃

当您说出来时,还可以访问它的输入/输出fg吗?
CiprianTomoiagă18年

这比处理工作编号要灵活得多。竖起大拇指。
thomp45793
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.