Что это значит, когда исполняемый файл перестает отвечать на Ctrl + C? - PullRequest
2 голосов
/ 22 ноября 2010

Я поиграл с некоторой отладкой и написал код на C, который выполняет множество операций с указателями (как инструмент Valgrind), который выполняется поверх Valgrind.За последний час я изменил что-то, в результате чего программа работает нормально, но затем перестает отвечать на Ctrl + C, когда я пытаюсь завершить его.

Я попытался запустить программу через gdb и все еще наблюдал то же поведение.Может кто-нибудь сказать мне, что вызывает такого рода поведение?

ОБНОВЛЕНИЕ : Я полагал, что это была бесконечная рекурсия, которая вызывала ошибку, но мне все еще интересно, почему она не отвечает накоманда.

Ответы [ 2 ]

2 голосов
/ 22 ноября 2010

A ОЧЕНЬ плохо зависла программа. Попробуйте открыть другой терминал и выполните

kill -SIGINT `pidof program-name`

(Если -SIGINT не работает, перейдите к -SIGTERM и -SIGKILL (имейте в виду, что SIGKILL немедленное завершение с NO очисткой))

1 голос
/ 22 ноября 2010

как для Как это может произойти, когда желание фактически обработать прерывание, скажем, выполнить некоторую очистку, оно зарегистрирует свой собственный обработчик прерываний для использования вместо обработчика по умолчанию (который обычно просто звонки exit() или abort() в зависимости от конкретного прерывания). Если в этом прерывании есть ошибка, то возникает обработчик, но программа на самом деле не работает должным образом. Поскольку единственный способ убить программу - это послать ей прерывание, вы не сможете убить программу вообще.

Ну, на самом деле, есть одно прерывание, с которым вы не можете сделать это, SIGKILL. Вы не можете ничего сделать в своей программе, чтобы предотвратить обработку, немедленно вызвав abort()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...