Выход из сценария Bash, когда sudo ребенок выходит

Вместо использования cat можно использовать tail как таковой:

tail -c +4 FILE

Это распечатает весь файл за исключением первых 3 байтов. Консультироваться man tail для получения дополнительной информации.

2
31.10.2013, 18:35
2 ответа

У Вас есть две проблемы: необходимо определить, когда любой из интересных детей сделан, и необходимо уничтожить всех их.

Первые средства Вы не можете использовать встроенное "ожидание", потому что это будет ожидать всех детей (или все перечисленные, если таковые имеются), не для любого. Ваше основанное на USR1 предложение работает хорошо на тот (и на ВЫХОД).

Второе намного более твердо: Поскольку Вы используете sudo, у Вас на самом деле нет разрешения отправить сигнал в процессы; для отправки сигнала в процесс или идентификатор пользователя должен соответствовать, или необходимо быть корнем.

Вы могли попытаться использовать файловую систему - или основанная на дескрипторе файла передача сигналов или что-то как этот, но откровенно говоря, это будет намного более понятным и читаемым и удобным в сопровождении в некотором другом языке сценариев (Python, жемчуг, безотносительно), и даже затем это чрезмерно сложно. Вы - вероятно, более обеспеченное выполнение всего сценария при целевом пользователе.

3
27.01.2020, 22:06

Если бы я мог предложить стиль UNIX -«разделить сложную задачу на более мелкие задачи», я бы начал с решения проблемы sudo, чтобы у вас оставался более простой «выход из сценария Bash, когда ребенок завершает работу». », когда ваша оболочка является прямым родителем дочерних элементов.

#!/bin/sh

exec sudo sh -c '
  exit_trap() {
     kill # pids
  }
  trap exit_trap SIGNALS
  # run children &
  wait # pids
'

Обратите внимание, что на данный момент скрипт представляет собой оболочку sudo -для внутреннего скрипта в одинарных кавычках. Я не уверен, что это того стоит, но, возможно, у вас есть дополнительный код для запуска до или после (, и в этом случае вы хотите удалитьexec)вызов sudo, что делает странность стоящей.

0
27.01.2020, 22:06

Теги

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