удар: другой вывод между CTRL-C по сравнению с “заказанной очисткой”

В конечном счете ежедневная газета ISOs вернулась назад к использованию GNOME как настольная среда.

3
16.04.2013, 01:14
1 ответ

Когда Вы совершаете нападки Ctrl-C, под управлением сценарий получает SIGINT и распространяет его к, он - дети, тогда как на "регулярном" выходе он отправил бы SIGTERM по умолчанию (от функции, зарегистрированной с EXIT).

Тем не менее существует большая разница между Ctrl-C и условие остановки. В то время как функцию-обработчик выхода называют в обоих случаях, фактические события полностью отличаются. В случае SIGINT дочерние процессы уничтожаются тот одним (или по крайней мере, вероятно, будут), и оболочка, интерпретирующая сценарий, не имеет большого шанса сообщить об этом изменении состояния. В другом случае это ловит SIGCHLD из завершенных программ и отображает информационное сообщение.

Теперь, можно получить сообщение на SIGINT также, если Вы даете оболочке интерпретации достаточно времени для проверки (более точно - так как я не думаю, что оболочка разбросала бы процессы-зомби в этой ситуации - для создания отчетов о состоянии), его дочерние процессы. Один способ сделать это использовал бы wait встроенный для активного ожидания всех или указанных процессов для изменения состояния. Аварийное завершение обработчика выходов (например, с другим sleep) мог бы быть опция также, но отметить, что это на самом деле - вид состояния состязания между завершением интерпретатора и проверением его детей (следовательно блокирование wait безопасный путь состоит в том, чтобы сделать это).

1
27.01.2020, 21:32
  • 1
    Когда я touch stop, сценарий прекращает регистрироваться (уничтожает кошку и хвост), и затем ожидает файла запуска снова. Это не выходит, таким образом, Ваш ответ, кажется, описывает другую ситуацию –  Christoph 17.04.2013, 09:59
  • 2
    я пропустил разрядный цикл в Вашем сценарии... –  peterph 17.04.2013, 17:55
  • 3
    @Christoph обновленный ответ имеет больше смысла Вам? –  peterph 19.04.2013, 11:36
  • 4
    Да это делает! У меня просто не было шанса проверить вывод при добавлении a wait в on_die потому что "другой конец" этого сценария вызывает проблемы. Я дам Вам обновление, как только я могу! –  Christoph 19.04.2013, 23:28
  • 5
    я добавил wait и это теперь дает мне последовательный вывод в реальном приложении.Спасибо! –  Christoph 24.04.2013, 14:38

Теги

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