在后台运行进程

在后台运行进程

关于在后台启动进程,我有两个问题:

  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]行)?

答案1

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

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

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

    无论原因是什么,在这个空行上按回车键应该会打印一个新行,其中包含您通常的提示(并且可能还有您刚刚生成的作业完成的消息;见下文)。

  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

相关内容