为什么 Unix 后台进程终止后不立即打印终止行?

为什么 Unix 后台进程终止后不立即打印终止行?

举个例子,如果我运行:

sleep 1 & sleep 2 & sleep 3

我将立即获取进程 ID,例如

[1] ...
[2] ...

然后 shell 冻结直到sleep 3运行完成,然后同时打印这些:

[1]-  Done                    sleep 1
[2]+  Done                    sleep 2

只是想知道导致这种行为的底层实现是什么。

答案1

shell的等待是由于最后一个sleep没有后台导致的。

消息

[1]-  Done                    sleep 1
[2]+  Done                    sleep 2

一般在方便的时候打印,大多数是在有提示时打印。尝试

sleep 3 &

并数到 10。不生成任何输出。但是,当您按 Enter 键时,您会收到新的提示,在此之前,您会收到消息Done

这与您所经历的情况相同。

相关内容