等待不等待

Hes*_*aod 4 shell process exit

如果我有一个名为myprogram包含的文件

sleep 200
date
Run Code Online (Sandbox Code Playgroud)

在后台运行:

$ sh myprogram &
Run Code Online (Sandbox Code Playgroud)

我想知道myprogram使用wait命令何时完成

$ cat >notify
wait PID
echo "Program completed"
$ sh notify &
Run Code Online (Sandbox Code Playgroud)

PID是第三个命令给出的进程ID,我的问题是在最后一个命令后立即在终端上打印消息“程序完成”,为什么等待不等待?,我使用的是 ubuntu 11.10

Bru*_*ger 7

所有涉及的“&”都破坏了父子关系。

内置函数显然基于的wait(2)系统调用wait仅适用于调用wait(2).

当您调用 时sh myprogram &,您将sh作为交互式 shell 的子进程运行。

当您调用 时sh notify &,它sh是交互式 shell 的子级。

所以第二个sh与第一个没有直接的父关系sh,并且wait不起作用。

如果您调用sh myprogram &; sh notify;任何一个,这甚至都不起作用,因为该wait命令是由交互式 shell 的子进程调用的。

对我有用的是:sh myprogram &; waitwait命令导致交互式 shell(sh显式调用的父级)挂起直到sh退出。