作业控制可能是 Linux 中我最喜欢的事情。我发现自己经常开始一个计算要求很高的过程,基本上使计算机一次无法使用长达几天,并且很庆幸总是有CTRL-Z
和fg
,以防我需要在特定时间段内使用该特定计算机。
然而,有时我想将一个作业插入到作业堆栈中。我一直不知道该怎么做。
我在用着bash
。
它可能看起来像这样:
$ ./reallybigjob
^Z
[1]+ Stopped reallybigjob
$ (stuff I don't know) && ./otherbigjob
$ fg
答案1
没有作业堆栈,每个作业都是独立处理的。
你可以做fg; otherbigjob
。这将放reallybigjob
回到前台,然后当fg
命令停止运行时otherbigjob
。这与第一个作业后排队执行不同otherbigjob
:如果按Ctrl+Z则otherbigjob
立即开始。如果你按Ctrl+C就会reallybigjob
被杀死。您不能留otherbigjob
在后台并在其之后排队另一个作业。
如果作业是 CPU 密集型作业,则该batch
实用程序可以让您在 CPU 不忙时安排下一个作业。
答案2
您可以在后台运行或暂停多个作业:
$ ./reallybigjob &
[1] 873
$ ./otherbigjob &
[2] 875
$ jobs
[1]- Running ./reallybigjob &
[2]+ Running ./otherbigjob &
$ fg 1
./reallybigjob
^Z
[1]+ Stopped ./reallybigjob
$ fg 2
./otherbigjob
^Z
[2]+ Stopped ./otherbigjob
$ jobs
[1]- Stopped ./reallybigjob
[2]+ Stopped ./otherbigjob
$bg 1
[1]- ./reallybigjob &
$ jobs
[1]- Running ./reallybigjob &
[2]+ Stopped ./otherbigjob
$