Привет, гуглер из будущего! Я нашел исправление с помощью этого сообщения , надеюсь, оно сработает для вас:
Process-A does not die with Ctrl-C but strace does (this is very strange)
Это совсем не странно, strace
обрабатывает не сигнал, а процесс -A. Сигнал, который является результатом control+c , отправляется всем процессам в группе процессов переднего плана (, если только терминал не находится в каком-либо другом режиме ), который для тестового примера ниже включает strace
и perl
. strace
завершается, но процесс игнорирования сигнала -продолжает работать до тех пор, пока не будет остановлен каким-либо другим способом.
% strace perl -E '$SIG{INT}="IGNORE";while(1){say $$;sleep 1}'
...
% 9520
9520
9520
kill9520
9520
%
I run grep 'search_string' to make grep wait for input in STDIN. Now I'm unable to close it with Ctrl-C.
Это действительно указывает на проблему конфигурации оболочки; grep
вероятно, унаследовал обработчик сигнала от родительского процесса, которым в данном случае будет ваша оболочка. У меня есть скрипт blocksig
, который иллюстрирует этот случай:
% grep asdf
^C
% blocksig grep asdf
^C^C^C^C^C^]^\zsh: quit blocksig grep asdf
%
Однако в вашем случае это ваша оболочка, а не blocksig
родительский процесс. Что произойдет, если вы переключитесь на другую оболочку или запустите свою оболочку, не прочитав типичные файлы rc
?Есть ли в конфигурации вашей оболочки какая-либо trap
настройка или настроенное задание или конфигурация мониторинга заданий?