Отслеживается ли PIPESTATUS процессов, работающих в фоновом режиме?
Расширяя вопрос, предложенный Сайрусом, я хотел знать, смогу ли я отследить тот же сценарий с PIPESTATUS
или что-то подобное, если я отправил его в фоновом режиме?
скрипт bash выглядит следующим образом:
#! /bin/bash
{ python script.py 2>&1 | tee logfile.log; } &
ret="${PIPESTATUS[0]}"
if [[ "$ret" -ne "0" ]]; then
echo "$ret"
fi
а также script.py
является:
print("hello")
exit(1);
print("world")
Когда я бегу bash
сценарий без &
это печатает PIPESTATUS
правильно, но в случае, когда я запускаю его в фоновом режиме, вывод не возвращается.
1 ответ
Прежде всего, как сказал Камил Цук, если вы хотите пипестатус фонового процесса, вам нужно:
{ python script.py 2>&1 | tee logfile.log; exit "${PIPESTATUS[0]}" }
Но так как вы запускаете что-то в фоновом режиме, ваш if
оператор, вероятно, запустится еще до того, как будет завершен, так какое возвращаемое значение вы ожидаете проверить?
Как правило, вы хотите запустить что-то в фоновом режиме, выполнить кучу работы, затем wait
для фоновой задачи, и только потом проверять ее возвращаемое значение.
wait
вернет статус завершения фоновой оболочки, так что это способ фактически получить код завершения, сгенерированный exit "${PIPESTATUS[0]}"