我在后台启动了两个进程。我怎样才能绝对保证wait $pid2 $pid3
在启动 3.sql 之前可以正常工作并等待完成?在确保 2.sql 完全完成之前,我无法关闭 3.sql。有人可以告诉我另一种检查方法吗?
#!/usr/bin/ksh
1.sql
2.sql &
3.sql &
pid2=$!
pid3=$!
wait $pid2 $pid3
4.sql
我在后台启动了两个进程。我怎样才能绝对保证wait $pid2 $pid3
在启动 3.sql 之前可以正常工作并等待完成?在确保 2.sql 完全完成之前,我无法关闭 3.sql。有人可以告诉我另一种检查方法吗?
#!/usr/bin/ksh
1.sql
2.sql &
3.sql &
pid2=$!
pid3=$!
wait $pid2 $pid3
4.sql
如果这是整个脚本,您可以通过执行简单的操作来简化它wait
:
#!/usr/bin/ksh
1.sql
2.sql &
3.sql &
wait
4.sql
如果要显式等待,则需要正确设置 pid。您正在等待3.sql
只是因为您2.sql
在后台运行,但在后台运行之前不收集它的 pid 3.sql
。你应该有:
#!/usr/bin/ksh
1.sql
2.sql &
pid2=$!
3.sql &
pid3=$!
wait $pid2 $pid3
4.sql
您当前使用的技术似乎是合法的。如果由于某种原因您不信任操作系统或 shell,您可以让脚本在完成后打印一些输出,并捕获该输出 - 例如:
rm -f 2.out 3.out
2.sql > 2.out &
3.sql > 3.out &
...
wait $pid2 $pid3
if [ "$(cat 2.out)" != "done" ] || [ "$(cat 3.out)" != "done" ]; then
echo "2.sql and 3.sql didn't really finish - exiting" >&2
exit 1
fi
4.sql
(您可以将if
andexit
变成while
带有 short的 a sleep
,这将首先消除对的需要wait
。)