Процесс продолжает работать после получения неисследованного SIGINT (Ctrl-C из терминала)

Привет, гуглер из будущего! Я нашел исправление с помощью этого сообщения , надеюсь, оно сработает для вас:

  1. Откройте системные настройки, затем перейдите в «Языки» → «Методы ввода».
  2. В раскрывающемся меню в разделе «Метод ввода» выберите «IBus».
  3. Если опция недоступна, нажмите кнопку «Добавить поддержку IBus», затем выполните шаг 2.
  4. Перезагрузите компьютер.

0
26.10.2018, 16:21
1 ответ

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настройка или настроенное задание или конфигурация мониторинга заданий?

0
28.01.2020, 04:11

Теги

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