无法读取后台调用的进程的输出

时间:2013-07-09 09:26:37

标签: shell sh vnc vnc-viewer

我正在尝试编写一个shell脚本来检查是否创建了vncservers。我的想法是执行“vncviewer MACHINE_NAME”并根据文本输出我可以决定是否创建了服务器(我基本上都在寻找“无法”)

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
问题是因为vncviewer调用弹出窗口,我需要自动终止vncviewer进程,因为我有一大堆机器,无法与每个弹出窗口进行交互。所以解决方案是使用$!将进程ID保存在“proc_id”中。但是我读到了那个$!仅适用于在后台调用的进程。这就是问题所在,当我在后台调用vncviewer并将stderr& stdout重定向到一个文件时,它似乎确实在文件完成/关闭时写入但未被杀死。所以现在我有一个空的文本文件,不管是什么,因为我总是通过在写入我用来做出决定的输出文件之前杀死它来中断vncviewer操作。

任何帮助?

1 个答案:

答案 0 :(得分:1)

可能输出结果是:

std.err

您可以尝试:

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