使用ksh93我正在尝试等待背景过程,run_cataloguer(),从单独的背景过程中完成,send_mail(),使用下面的脚本:
#!/usr/bin/env ksh
function run_cataloguer
{
echo "In run_cataloguer()"
sleep 2
echo "leaving run_cataloguer()"
}
function send_mail
{
echo "In send_mail()"
#jobs
wait_for_cataloguer
sleep 1
echo "Leaving send_mail() "
}
function wait_for_cataloguer
{
echo "In wait_for_cataloguer() PID_CAT = $PID_CAT"
wait $PID_CAT
waitRet=$?
echo "waitRet = $waitRet"
}
run_cataloguer &
PID_CAT=$!
echo "PID_CAT = $PID_CAT"
send_mail &
wait # Wait for all
echo "Finished main"
可以看到以下输出:
PID_CAT = 1265
In run_cataloguer()
In send_mail()
In wait_for_cataloguer() PID_CAT = 1265
waitRet = 127 # THIS SHOULD be 0
Leaving send_mail()
leaving run_cataloguer()
Finished main
问题是waitre = 127这意味着wait命令看不到$ pid_cat,因此它不等待run_cataloguer()完成和"离开send_mail()"以前打印"离开run_cataloguer()"如果我在前景中运行send_mail,则waitre = 0,这是正确的。
因此,似乎您无法在单独的背景过程中等待背景过程。另外,如果我取消命令命令,则什么都不会返回,这似乎可以确认上一个语句。如果有人有解决方案,则使用标志文件分开形式,:),这将不胜感激。
看来无法完成。我使用的解决方案来自Parvinder:等待孩子的过程,但会出错:" PID不是这个壳的孩子'