等待
我们将演示 等待 先指挥。 为此,我们需要两个脚本,一个父脚本:
#!/斌/庆典
# async-parent: 异步执行演示 (parent) echo "Parent:starting..."
echo "Parent: 启动子脚本..." async-child &
pid=$!
echo "父:子 (PID= $pid) 已启动。"
echo "家长:继续..." sleep 2
回声“父母:暂停等待孩子完成...”等待 $pid
echo "Parent: child is done. Continuing..." echo "Parent: parent is done. exiting."
#!/斌/庆典
# async-parent: 异步执行演示 (parent) echo "Parent:starting..."
echo "Parent: 启动子脚本..." async-child &
pid=$!
echo "父:子 (PID= $pid) 已启动。"
echo "家长:继续..." sleep 2
回声“父母:暂停等待孩子完成...”等待 $pid
echo "Parent: child is done. Continuing..." echo "Parent: parent is done. exiting."
和一个子脚本:
#!/斌/庆典
# async-child: 异步执行演示(child) echo "Child: child is running..."
睡5
echo "孩子:孩子完成了。退出。"
#!/斌/庆典
# async-child: 异步执行演示(child) echo "Child: child is running..."
睡5
echo "孩子:孩子完成了。退出。"
在这个例子中,我们看到子脚本非常简单。 真正的动作是由父级执行的。 在父脚本中,子脚本被启动并置于后台。 子脚本的进程ID通过分配 PID 变量的值 $! shell 参数,它将始终包含最后一个进入后台的作业的进程 ID。
父脚本继续执行,然后执行 等待 带有子进程PID的命令。 这会导致父脚本暂停,直到子脚本退出,此时父脚本结束。
执行时,父脚本和子脚本产生以下输出:
[我@linuxbox ~]$ 异步父
家长:开始...
[我@linuxbox ~]$ 异步父
家长:开始...
异步执行
父:启动子脚本... 父:子 (PID= 6741) 已启动。 家长:继续...
孩子:孩子在跑...
家长:暂停等待孩子完成... 孩子:孩子完成了。 退出。
家长:孩子完成了。 继续... 父级:父级完成。 退出。
父:启动子脚本... 父:子 (PID= 6741) 已启动。 家长:继续...
孩子:孩子在跑...
家长:暂停等待孩子完成... 孩子:孩子完成了。 退出。
家长:孩子完成了。 继续... 父级:父级完成。 退出。