Процесс продолжает работать после получения необработанного SIGINT (Ctrl-C от терминала)
Я пытаюсь прервать некоторые запущенные процессы с Ctrl-C
из терминала; некоторые делают, некоторые нет.
Один из проблемных процессов (Process-A) - это сборочный файл GNU, в котором нет ничего сложного; просто обычная система создания файлов. Другое (Process-B) представляет собой приложение C, которое прослушивает сокет TCP.
Ниже приведены мои наблюдения, когда я запускаю (и пытаюсь завершить) некоторые из этих проблемных процессов:
- Процесс-А не умирает с
Ctrl-C
, Когда смотрю с strace -f иCtrl-C
нажата кнопка "strace" отсоединяется от подпроцессов и выходит из режима " strace", но Process-A продолжается без журналов strace (это очень странно). - Процесс-B не умирает с
Ctrl-C
, Когда началось сstrace -f
, ловит SIGINT и завершает работу, как и ожидалось. - Процесс-B не умирает с
Ctrl-C
, Когда подавлено на задний план и отправлено SIGINT извне (kill -s SIGINT PID
) все еще отбрасывает его, пока SIGTERM его убивает.
Дополнительные детали:
- С помощью тестовой программы я убедился, что мой терминал отправляет процесс SIGINT (тестовая программа завершает работу).
- Ни в одном из процессов я вручную не фиксирую сигналы.
- Пробовал с несколькими терминальными приложениями наблюдать одинаковое поведение.
Нужна некоторая ясность о том, как эти сигналы каскадируются и чего мне здесь не хватает. Как можно отладить такие проблемы?
Обновить:
я бегу grep 'search_string'
заставить grep ждать ввода в STDIN
, Теперь я не могу закрыть его Ctrl-C
, Начинаю задумываться, не является ли это проблемой, специфичной для окружающей среды.