Отслеживается ли 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]}"

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