Решено Мне нужно создать фоновые процессы в MakeFile, а также учесть их коды выхода. Сценарий:
- несколько процессов порождаются в фоновом режиме.
- MakeFile продолжает оценку (и не хочет проверять PID порожденных процессов в каком-то цикле и т. д.)
- Некоторый процесс завершается с ненулевым кодом выхода
- сделать выход утилиты с ненулевым кодом выхода
Естественно, я думаю использовать command &
для запуска процесса в фоновом режиме.
Проблема: если команда указана как command &
, то процесс make не отслеживает свой код выхода.
Пример 1
do:
@false & \
echo "all is normal"
%make -f exit_status_test.mk
all is normal
Пример 2
do:
@false && \
echo "all is normal"
%make -f exit_status_test.mk
*** Error code 1
Stop in /usr/home/scher/tmp/lock_testing.
Пример 1 показывает, что утилита make не учитывает код завершения фонового процесса.
P.S. Пожалуйста, не советуйте хранить PID порожденных процессов и проверять их в цикле с некоторой задержкой sleep
и т.д. Необходимо продолжить оценку MakeFile и автоматически выйти с ненулевым кодом.
Решение
do:
@(echo "background command" ; (echo "[HANDLER] Prev command exits with $$?")) & \
echo "doing something"
Таким образом, мы можем создать последовательность команд для обработки статуса завершения фонового процесса.