等待来自另一个背景功能的背景PID



使用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不是这个壳的孩子'

最新更新