如何从正在运行的进程中分叉?

时间:2013-02-11 08:50:22

标签: bash

我经常这样做:

$ gitk &

要启动一个程序(在这种情况下像gitk,但它没关系)并返回shell提示继续在同一个shell中工作。在你写完

之后,你会怎么做呢?
$ gitk

没有&?是否有像^z这样的组合键,将进程置于后台但不中断它?

2 个答案:

答案 0 :(得分:4)

如果您在没有&的情况下启动了该过程,它将在前台运行。按Ctrl+Z将停止该过程,然后输入命令bg以在后台恢复流程执行。

答案 1 :(得分:1)

每次拨打外部程序(例如lsgitk或其他任何内容时),都会执行fork。在Bash中运行&的程序比fork更多。它创建一个在后台运行的新进程组。

Ctrl + z通常具有将作业置于后台停止状态的效果(使用信号),并使用bg重新启动。我说“通常”是因为它可以使用stty进行更改。要列出终端设置(以及查看其他魔术Ctrl键),请尝试stty -a

后台作业的一个特点是它们通常无法访问键盘,但可以访问屏幕。这可以与其他输出混合使用,因此您可以使用stty tostop来阻止它。必须将作业置于前台才能使用屏幕,或使用stty -tostop。使用fg将作业带到前台。

请注意,您可以拥有许多后台作业,请键入jobs查看。某些命令(包括fgbgkill采用可选的作业编号(前缀为%)。