Shell Job Control:使用WNOHANG等待跟踪背景状态

时间:2015-03-08 04:18:16

标签: shell wait background-process

GNU对此行的意义是什么(来自here)?

  

shell还必须检查后台作业的状态,以便它可以向用户报告已终止和已停止的作业;这可以通过使用WNOHANG选项调用waitpid来完成。

我不明白为什么shell应该在执行之前提醒用户有关后台进程的信息。那看起来会是什么样的?比如,调用ls,但后台进程已完成,因此进程'在ls之前打印状态?

1 个答案:

答案 0 :(得分:1)

用于为后台作业实现以下通知:

$ cmd_1 &
$ cmd_2
$ cmd_3
[1]+  Done                    cmd_1
$

sleep 5之类的内容是cmd_1很好的尝试。{/ p>

在上文中,假设在cmd_1被输入或运行时,后台cmd_3作业完成。之后,在打印上面的最后一个提示之前发送通知。

waitpid(2)用于等待进程更改状态(终止或停止或启动,例如Ctrl-Zfg所做的事情。

要实现上面的显示,shell可以调用waitpid(2)以在每次提示输入新命令之前检查后台作业是否已更改状态。如果它在没有传递WNOHANG的情况下执行此操作,那么waitpid()调用将阻塞,直到后台作业实际更改状态,这意味着shell将在cmd_1完成之前停止,然后再打印第二个提示。 WNOHANG使waitpid()调用无阻塞,并允许shell进行" poll"而是改变工作中的状态。