wait bash-builtin сжигает процессор на 100 процентов

Мы можем использовать оператор сравнения awk

$ cat ip.txt 
Blah blah blah 2018-12-13
Blah blah blah 2018-02-13
Blah blah blah 2018-05-01

$ awk '$NF < "2018-05-01"' ip.txt 
Blah blah blah 2018-02-13


, чтобы получить строки меньше или равные некоторым date:

$ awk '$NF <= "2018-05-01"' ip.txt 
Blah blah blah 2018-02-13
Blah blah blah 2018-05-01

16
15.08.2016, 15:45
1 ответ

Наблюдения

  • ctrl + c отправляет SIGINT процессу fg в Терминале 1
  • , следовательно, выполняется kill -2 в Терминале 2 то же самое, что нажатие ctrl + c в Терминале 1
  • выполнение одного из двух вышеуказанных пунктов перед выполнением kill -10 в Терминале 2 обрабатывает SIGINT правильно
  • делает это после выполнения kill -10 в Терминале 2 (отправка сигнала SIGUSR1 ) не делает » t обрабатывает SIGINT правильно и приводит к проблемному поведению
  • Замена kill -2 в Терминале 2 ( SIGINT ) на kill - 15 ( SIGTERM ) или kill -9 ( SIGKILL ) всегда приводит к правильной обработке сигналов.
  • выполнение kill -10 в Терминале 2 прерывает встроенную функцию wait , но не выходит из цикла, поскольку тест печатается сразу после сигнала SIGUSR1 перехватывается, и цикл продолжается.
  • Отправка SIGINT прерывает выполнение цикла и замораживает оболочку или никогда не прерывает ожидание и остается в ожидании / замораживании.

Заключение

SIGINT не перехватывается и не обрабатывается правильно или игнорируется после ручного перехвата SIGUSR1 или, возможно, любого другого определяемого пользователем перехвата. Это означает, что процесс все еще существует, и поэтому он ест / нагревает процессор или замораживает оболочку.Выполнение kill -15 или kill -9 из Терминала 2 завершает / убивает процесс, возвращает вам контроль над Терминалом 1 и расслабляет ваш процессор.

Почему возникает эта проблема, до сих пор остается загадкой, но я надеюсь, что кто-нибудь сможет точно объяснить, что на самом деле происходит за кулисами.

1
27.01.2020, 19:49

Теги

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