进程列表作为后台进程

进程列表作为后台进程
abhigenie92@ubuntu:~$ (sleep 2; echo $BASH_SUBSHELL ;sleep 2)
1
abhigenie92@ubuntu:~$ (sleep 2; echo $BASH_SUBSHELL ;sleep 2)&
[1] 3297
abhigenie92@ubuntu:~$ 1

[1]+  Done                    ( sleep 2; echo $BASH_SUBSHELL; sleep 2 )

当将其作为后台进程启动时会发生什么,为什么我没有收到提示而必须按Enter?在这两种情况下,它都会启动一个子 shell。

答案1

得到提示返回(请参阅代码块的第五行) - 以及然后你得到了输出。当您Enter第三次输入时,您仍然处于“shell 提示符”状态。

理论上,可以对 shell 进行编程,以便在后台进程终止时重新发出提示。但

  1. 这真的没什么帮助。您的问题是,当后台作业完成echo 11出现在您的终端上时,您的光标返回到屏幕的左边缘,并且您仍然“处于 shell 提示符”变得不明显。并且前台 shell 不知道后台任务何时写入屏幕。
  2. 从历史上看,shell 不知道你什么时候在打字一个命令;它只知道您何时输入Enter。 (在某些情况下,情况可能仍然如此。)因此 shell 不会知道您是否正在输入第三个命令

    (sleep 3; echo someth
    

    如果您在输入命令的过程中出现新的 shell 提示符,那将会非常令人困惑。

相关内容