Процесс продолжает работать после получения необработанного 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 его убивает.

Дополнительные детали:

  1. С помощью тестовой программы я убедился, что мой терминал отправляет процесс SIGINT (тестовая программа завершает работу).
  2. Ни в одном из процессов я вручную не фиксирую сигналы.
  3. Пробовал с несколькими терминальными приложениями наблюдать одинаковое поведение.

Нужна некоторая ясность о том, как эти сигналы каскадируются и чего мне здесь не хватает. Как можно отладить такие проблемы?

Обновить:

я бегу grep 'search_string' заставить grep ждать ввода в STDIN, Теперь я не могу закрыть его Ctrl-C, Начинаю задумываться, не является ли это проблемой, специфичной для окружающей среды.

0 ответов

Другие вопросы по тегам