Не удается прочитать выходные данные процесса, вызванного в фоновом режиме

Я пытаюсь написать сценарий оболочки, который проверяет, созданы ли 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, потому что у меня большой список машин и я не могу позволить себе взаимодействовать с каждым всплывающим окном. Таким образом, решение было сохранить идентификатор процесса в "proc_id", используя $!. Но я прочитал это $! эффективен только для процессов, которые вызываются в фоновом режиме. И тут возникает проблема, когда я вызываю vncviewer в фоновом режиме и перенаправляю stderr & stdout в файл, кажется, что он действительно записывает данные в файл, когда он завершен / закрыт, но не уничтожен. Так что теперь у меня есть пустой текстовый файл, независимо от того, что, так как я всегда прерываю операцию vncviewer, убивая его, прежде чем он записывает в выходной файл, который я использую для принятия решения.

Любая помощь?

1 ответ

Вероятно, результат будет:

std.err

Ты можешь попробовать:

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

Другие вопросы по тегам