Как обрабатывать асинхронный выход из подоболочки

Según la Documentación de Openconnect , la opción que le gustaría probar sería:

-b,--background

Continue in background after startup

5
27.06.2019, 23:38
2 ответа

Это не связано с тем, что процесс является фоновым, это связано со статусом выхода команды wait.

Изhelp wait:

If ID is not given, waits for all currently active child processes, and the return status is zero.

$ bash -exc '(sleep 1; exit 1) & wait ; echo done'
+ wait
+ sleep 1
+ exit 1
+ echo done
done

If the -n option is supplied, waits for the next job to terminate and returns its exit status.

$ bash -exc '(sleep 1; exit 1) & wait -n; echo $?:done'
+ wait -n
+ sleep 1
+ exit 1
3
27.01.2020, 20:37

Ваш код не завершит текущую сессию оболочки, поскольку ему не возвращается не -нулевой статус выхода . Результат в вызывающей оболочке запуска фонового задания всегда нулевой.

Если бы вы использовали wait "$!"илиwait -n(«ожидание завершения следующего задания» ), тогда сеанс оболочки был бы завершен, поскольку waitвернул бы статус выхода из ожидаемое задание, которое не равно -нулю.

См. help waitв bash.

2
27.01.2020, 20:37

Теги

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