
假設正在後台運行 FOO 為 BAR 星標。如何在 shell 中等待 BAR 完成?我想要一個不改變 FOO 內部結構的解決方案(儘管我可以勉強改變 BAR 的內部結構)。
FOO
# Somehow wait on all forked processes of FOO
echo FOO and BAR have finished.
PS:我想到的具體用例是等待 Aria2 運行使用的腳本,—-on-download-complete
但我希望能夠盡可能普遍地解決這個問題。
答案1
您可以使 BAR 將其 PID 輸出到文件中;然後檢查直到具有該 PID 的進程不再運行。像這樣的東西:
在 BAR.sh 上:
#!/bin/bash
(echo $$)>/tmp/BAR.pid
...
在 runFOO.sh 上:
#!/bin/bash
# possibly remove pid from previous run:
if [ -f /tmp/BAR.pid ]; then
rm /tmp/BAR.pid
fi
# launch FOO
./FOO.sh &
# make sure BAR has started:
while [ ! -f /tmp/BAR.pid ]; do
sleep 1
done
# wait for BAR to finnish:
while [ $(kill -s 0 $( cat /tmp/BAR.pid ) 2>&1 | wc -l) -eq 0 ]; do
sleep 1;
done