Shell Can';t从后台调用的进程读取输出

Shell Can';t从后台调用的进程读取输出,shell,sh,vnc,vnc-viewer,Shell,Sh,Vnc,Vnc Viewer,我试图编写一个shell脚本,检查是否创建了VNCServer。其想法是执行“vncviewer MACHINE_NAME”,根据文本输出,我可以决定是否创建了服务器(我基本上查找“unable”) 问题是,由于vncviewer调用了一个弹出窗口,我需要自动终止vncviewer进程,因为我有一个很大的机器列表,无法与每个弹出窗口交互。因此,解决方案是使用$!”将进程ID保存在“proc_ID”中!。但是我读到了!仅对在后台调用的进程有效。问题来了,当我在后台调用vncviewer并将stde

我试图编写一个shell脚本,检查是否创建了VNCServer。其想法是执行“vncviewer MACHINE_NAME”,根据文本输出,我可以决定是否创建了服务器(我基本上查找“unable”)

问题是,由于vncviewer调用了一个弹出窗口,我需要自动终止vncviewer进程,因为我有一个很大的机器列表,无法与每个弹出窗口交互。因此,解决方案是使用$!”将进程ID保存在“proc_ID”中!。但是我读到了!仅对在后台调用的进程有效。问题来了,当我在后台调用vncviewer并将stderr&stdout重定向到一个文件时,它似乎确实在文件完成/关闭但未终止时写入该文件。所以现在我有了一个空的文本文件,不管发生什么,因为我总是在vncviewer写入我用来做决定的输出文件之前,通过终止它来中断vncviewer操作


有什么帮助吗?

输出可能是:

std.err

您可以尝试:

eval vncviewer$machine:149>/tmp/${machine}\u vnc_status.txt 2>&1&

linuxMachineList="grd-ies-rh6-03"
for machine in $linuxMachineList
do
    echo "Pinging $machine..."
    echo -n '' > /tmp/${machine}_vnc_status.txt
    eval vncviewer $machine:149 &> /tmp/${machine}_vnc_status.txt&
    proc_id=$!
    kill -9 $proc_id
    grep -i unable /tmp/${machine}_vnc_status.txt > /dev/null
    if [ $? == 0 ]
    then
        echo "Error: $machine does not respond"
    else
        echo "$machine is OK!"
    fi
done