GNU对此行的意义是什么(来自here)?
shell还必须检查后台作业的状态,以便它可以向用户报告已终止和已停止的作业;这可以通过使用
WNOHANG
选项调用waitpid来完成。
我不明白为什么shell应该在执行之前提醒用户有关后台进程的信息。那看起来会是什么样的?比如,调用ls,但后台进程已完成,因此进程'在ls之前打印状态?
答案 0 :(得分:1)
用于为后台作业实现以下通知:
$ cmd_1 &
$ cmd_2
$ cmd_3
[1]+ Done cmd_1
$
(sleep 5
之类的内容是cmd_1
很好的尝试。{/ p>
在上文中,假设在cmd_1
被输入或运行时,后台cmd_3
作业完成。之后,在打印上面的最后一个提示之前发送通知。
waitpid(2)
用于等待进程更改状态(终止或停止或启动,例如Ctrl-Z
和fg
所做的事情。
要实现上面的显示,shell可以调用waitpid(2)
以在每次提示输入新命令之前检查后台作业是否已更改状态。如果它在没有传递WNOHANG
的情况下执行此操作,那么waitpid()
调用将阻塞,直到后台作业实际更改状态,这意味着shell将在cmd_1
完成之前停止,然后再打印第二个提示。 WNOHANG
使waitpid()
调用无阻塞,并允许shell进行" poll"而是改变工作中的状态。