Почему Ctrl \ (обратная косая черта) больше не убивает процесс?

Какое-то время Ctrl + \ работал как шарм. Теперь это не убивает процесс. На самом деле это ничего не делает.

Пример того, как это НЕ работает:

adi@ebi:~ $ sleep 10
^C

[exited with 130]
adi@ebi:~ $ sleep 10
^\^\^\^\^\^\^\^\^\^\^\ 
adi@ebi:~ $

Ctrl + C останавливает сон как обычно, но Ctrl + \ нет, но так и должно быть, верно?

6
задан 4 December 2013 в 05:44

2 ответа

Вы можете перечислить настройки своего терминала, выполнив

stty -a

Он распечатает ваши горячие клавиши, где «^» обозначает Ctrl , например, у меня есть:

[ 111]

Отметьте man stty, чтобы узнать, какой специальный символ выполняет, например:

quit CHAR
          CHAR will send a quit signal

Так что « quit = ^ \ » в моем выводе означает, что если я нажму Ctrl + \ отправит сигнал на выход ( SIGQUIT ) процессу. Если ваш выход stty -a отличается, вы можете установить его с помощью

stty quit ^\

или, если хотите, например, Ctrl + K для сигнала SIGQUIT используйте

stty quit ^k

Но учтите, что каждый сигнал, кроме SIGKILL , может быть перехвачен процесс получения, чтобы процесс мог его игнорировать, если его разработчик решил это сделать. А также я думаю, что использовать Ctrl + C (SIGINT) лучше, чем использовать Ctrl + \ (SIGQUIT) потому что действие по умолчанию для обоих сигналов состоит в том, чтобы завершить процесс, но в случае SIGQUIT также следует выполнить coredump, что, как я думаю, обычно не требуется.

0
ответ дан 4 December 2013 в 05:44

Что Ctrl + \ делает, так это отправляет SIGQUIT на передний план процесса. Некоторые разработчики хотят использовать события SIG * таким образом, которого пользователь может не ожидать или к которому он привык. Вы не упомянули программу, но давайте посмотрим на мой случай с Ctrl + \ и mplayer:

AO: [pulse] 44100Hz 2ch floatle (4 bytes per sample)
Video: no video
Starting playback...
A:   1.7 (01.7) of 0.0 (unknown)  0.4% 
// here I press Ctrl + \

MPlayer interrupted by signal 3 in module: play_audio
A:   1.0 (00.9) of 0.0 (unknown)  0.4% 

Exiting... (Quit)

Как видите, mplayer поймать сигнал, но не выходите немедленно. Если бы я использовал Ctrl + C , он сказал бы «MPlayer прерван сигналом 2 в модуле: play_audio» . Я пытаюсь объяснить, что каждая программа может интерпретировать сигналы так, как им нравится, не заботясь о том, что она должна делать. Вы должны просмотреть документацию. Также помните, что SIGKILL или 9 следует использовать в качестве последнего ресурса. Вы должны убедиться, что нажатия клавиш также отправляются процессу, карта клавиш правильная и ваша клавиатура подключена.

0
ответ дан 4 December 2013 в 05:44

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

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