在后台运行进程


1

关于在后台启动流程我有2个问题:

  1. 为什么在后台启动进程是这样​​的:

    ./my_program &

    my_program当然有exe权限集)不会像其他任何命令那样使bash打印命令提示符吗?它只是留下一个空的新行,闪烁的光标。

  2. 当我在后台运行下一个新进程bash显示...... 像那样:

    ./my_program & [30] 1439 [27] Done ./my_program [28] Done ./my_program [29] Done ./my_program

    这是否意味着在后台启动另一个额外进程会使系统显示有关预览进程([27], [28], [29] 行)的信息,只要当前启动([30]行)?


如果你再按<return>一次会怎么样?你有提示吗?
Attie

Answers:


0
  1. 这不应该发生。当你在后台运行命令bash时,通常只打印作业号和pid(见下文),然后回到命令提示符。

    我知道的唯一原因导致bash在这种情况下给你留下一个新行,如果你的命令实际上不存在,因为在打印PS1后它会以某种方式给出错误消息:

    $ nonexistant_command &
    [1] 13856
    $
    nonexistant_command: command not found
    <empty line with blinking cursor here>

    无论原因是什么,在这条空行上按Enter键应该按照你的通常提示打印一个新行(可能还有你刚刚生成的作业完成的消息;见下文)。

  2. 您看到的额外输出是bash告诉您当前的后台作业:

    首先,它会告诉您任何新创建的后台进程的当前作业编号及其pid,如下所示:

    $ some_command &
    [1] 1234

    这意味着该命令some_command现在以pid 1234作为作业1运行。

    一旦后台作业完成,bash将在下次打印命令提示符时通知您(无论是因为您生成了另一个后台进程,在前台运行了一个命令,还是只用一个空命令行按下了enter)像这样的消息:

    [1]  Done                    some_command

    这意味着运行的数字1的作业some_command现在已经完成。

    要了解bash当前正在跟踪的后台作业,您可以jobs像这样使用内置:

    $ jobs
    [1]  Running                 some_command &
    [2]  Running                 some_other_command &

    要将作业带到前台,您可以使用fg

    $ fg 2
    some_other_command

    有关这方面的更多信息,请尝试 help jobs

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.