Мы можем использовать оператор сравнения 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
Наблюдения
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 и расслабляет ваш процессор.
Почему возникает эта проблема, до сих пор остается загадкой, но я надеюсь, что кто-нибудь сможет точно объяснить, что на самом деле происходит за кулисами.