Иногда, когда приложение зависает в сеансе bash (например, сеть задерживается telnet
, ssh
, что угодно) Я не могу убить его с помощью ^ C, остановить его с помощью ^ D и даже отправить в фон с помощью ^ Z.
Есть ли способ убить его, не открывая другую оболочку с помощью kill
? Я думаю, есть системный вызов, который нужно прервать
Если вы используете SSH, попробуйте комбинацию двух кетстрок: ~ ^ z (тильда, а затем Ctrl-z). Это выйдет из сеанса SSH. То же самое можно сделать с помощью telnet, нажав ^] (ctrl, а затем]).
Теперь вы можете начать новый сеанс и убить вызывающий нарушение процесс или весь сеанс. Это то, что вы ищите?
Вы можете отправить процесс SIGQUIT
с Ctrl- \, который иногда работает, если у процесса есть обработчик сигнала для SIGTERM
(Ctrl-c) или SIGSTOP
(Ctrl-z).
Если ваш процесс блокирует системные вызовы ввода-вывода (ps показывает это в состоянии D), он находится в непрерывном режиме сна, и вам придется подождать, пока ресурс, которого он ожидает, не начнет отвечать.