后台作业完成的通知是否基于某些回调事件处理?

后台作业完成的通知是否基于某些回调事件处理?

当 bash 中的后台作业完成时,它将通知终端。

$ sleep 3 &
[1] 17527
$ 
[1]+  Done                    sleep 3
  • 通知是否基于某些回调事件处理?

  • 后台作业完成时是否通过向终端发送一些信号来通知终端?

  • 为什么我必须按回车键(即运行空命令)才能在终端上看到通知?

答案1

来自联机帮助页

每当作业状态发生变化时,shell 都会立即学习。通常,bash等到要打印提示时才报告作业状态的更改,以免中断任何其他输出。如果 启用了内置命令-b 的选项 ,则立即报告此类更改。每个退出的子进程都会执行任何陷阱 。setbashSIGCHLD

这解释了为什么您需要按Enter才能看到通知。您可以通过运行来更改它set -b。和这个没有太大关系终端,作业控制由 shell 管理。当后台进程终止时,父进程会收到SIGCHLD信号;这就是通知。

相关内容