Получите код выхода фонового процесса

В документации сказано, что это для 3D-изображений, и вы можете передавать 2D-изображение.

Вы также можете взглянуть на более не поддерживаемый пример приложения . Он должен работать с версией ITK 4.2, возможно, до 4.6 или 4.8.

112
задан codeforester 5 May 2018 в 20:33
поделиться

3 ответа

Мое решение состояло в том, чтобы использовать неименованный канал для передачи состояния контролирующему циклу. Нет никаких временных файлов, используемых для обмена состоянием так ничто к очистке. Если бы Вы были не уверены в количестве фоновых заданий, то условие повреждения могло бы быть [ -z "$(jobs -p)" ].

#!/bin/bash

exec 3<> <(:)

{ sleep 15 ; echo "sleep/exit $?" >&3 ; } &

while read -u 3 -t 1 -r STAT CODE || STAT="timeout" ; do
    echo "stat: ${STAT}; code: ${CODE}"
    if [ "${STAT}" = "sleep/exit" ] ; then
        break
    fi
done
0
ответ дан 24 November 2019 в 02:52
поделиться
#/bin/bash

#pgm to monitor
tail -f /var/log/messages >> /tmp/log&
# background cmd pid
pid=$!
# loop to monitor running background cmd
while :
do
    ps ax | grep $pid | grep -v grep
    ret=$?
    if test "$ret" != "0"
    then
        echo "Monitored pid ended"
        break
    fi
    sleep 5

done

wait $pid
echo $?
7
ответ дан 24 November 2019 в 02:52
поделиться

1: В bash $! содержит PID последнего выполненного фонового процесса. Это все равно скажет вам, какой процесс отслеживать.

4: wait ждет, пока процесс с PID завершен (он будет блокироваться до завершения процесса, поэтому вы можете не вызывать его, пока не будете уверены, что процесс завершен), а затем возвращает код завершения завершенного процесса.

2, 3: пс или пс | grep "$!" может сказать вам, выполняется ли процесс еще. Вам решать, как понять результат и решить, насколько он близок к завершению. ( ps | grep не является защитой от идиотов. Если у вас есть время, вы можете придумать более надежный способ узнать, выполняется ли процесс).

Вот скелет скрипта:

# simulate a long process that will have an identifiable exit code
(sleep 15 ; /bin/false) &
my_pid=$!

while   ps | grep " $my_pid "     # might also need  | grep -v grep  here
do
    echo $my_pid is still in the ps output. Must still be running.
    sleep 3
done

echo Oh, it looks like the process is done.
wait $my_pid
# The variable $? always holds the exit code of the last command to finish.
# Here it holds the exit code of $my_pid, since wait exits with that code. 
my_status=$?
echo The exit status of the process was $my_status
109
ответ дан 24 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: