Страница 1 из 1

Как прервать операцию в консоли?

Добавлено: 17.02.2016 23:59
монах Тук
Вот эту, например:

Код: Выделить всё

 while : ; do date; sleep 5; done

Ctrl+Z или Ctrl+C ничего не даёт. Печатается Z или C и всё на этом, продолжается вывод даты. Спасибо, кто откликнется.

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 00:03
Bizdelnick
Ctrl+C должно работать.
Что за шелл? ls -l "$SHELL"

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 00:08
монах Тук
Bizdelnick писал(а):
18.02.2016 00:03
Ctrl+C должно работать.
Что за шелл? ls -l "$SHELL"

Код: Выделить всё

ls -l "$SHELL"
-rwxr-xr-x 1 root root 921460 авг 16  2013 /bin/bash*


Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 00:26
serzh-z
Подозреваю, что автор пользуется удалённым эмулятором терминала типа PuTTY, и обработка сигналов ^C там немного отличается от подобной обработки на локальной машине.

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 00:43
SLEDopit
Bizdelnick писал(а):
18.02.2016 00:03
Что за шелл? ls -l "$SHELL"
$SHELL должен содержать информацию о предпочтительном логин шелле (тому, что в /etc/passwd прописан).
По стечению обстоятельств, чаще всего оно совпадает с текущим шеллом сессии, но не стоит на это полагаться.

Код: Выделить всё

SHELL
            This variable shall represent a pathname of the user's preferred command
            language interpreter. If this interpreter does not conform to the Shell
            Command Language in XCU Shell Command Language, utilities may behave
            differently from those described in POSIX.1-2008.
// http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 01:45
Bizdelnick
А какой версии баш? /bin/bash --version

serzh-z писал(а):
18.02.2016 00:26
Подозреваю, что автор пользуется удалённым эмулятором терминала типа PuTTY, и обработка сигналов ^C там немного отличается от подобной обработки на локальной машине.

А что там может отличаться? Он или передаёт сочетание клавиш шеллу, или нет.

монах Тук
Я правильно понимаю, что Ctrl+C прерывает sleep, но не цикл? То есть в Вашем примере при нажатии сразу же печатается дата?

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 06:41
bormant
Всегда можно с другой консоли получить список процессов (ps ax), убить желаемый (kill id).
Вариант того же -- htop, выбрать, убить.

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 07:01
yars
killall -s KILL $PPID

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 13:26
Olej
yars писал(а):
18.02.2016 07:01
killall -s KILL $PPID

killall посылает сигна не по PID, а по имени процесса.
Но указанное действие можно сделать с kill.


монах Тук писал(а):
17.02.2016 23:59
Вот эту, например:

Код: Выделить всё

 while : ; do date; sleep 5; done

Ctrl+Z или Ctrl+C ничего не даёт. Печатается Z или C и всё на этом, продолжается вывод даты. Спасибо, кто откликнется.

Все эти ваши хоткеи Ctrl+Z и Ctrl+C - это посылка сигнала процессу, реакция на которые может быть заблокирована, или которые будут прерывать блокированные состояния (sleep).
Посылайте сигнал -9, который невозможно блокировать:

Код: Выделить всё

$ sudo kill -9 <ваш_PID>


Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 16:47
SLEDopit
монах Тук
скорее всего ваша проблема в том, что ctrl+c отлавливает sleep, а не сам bash.
попробуйте так:

Код: Выделить всё

while sleep 5 ; do date ; done

Ну или можно обернуть всё это в скрипт..

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 16:52
монах Тук
Прежде, чем я приступлю к работе (я сейчас с винды пишу), внесу уточнение, важно оно или нет не знаю, но меня не спрашивали, а сам я сразу и точно не могу оценить степень важности, ибо я ноль полный. Быть может, оно прольёт свет на проблему.

Ctrl+Z и Ctrl+C не печатают ^Z или ^C, а печатают просто Z или C

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 17:11
Bizdelnick
Это в графическом эмуляторе терминала? А в виртуальной консоли?
Не связано ли это с Вашими экспериментами? Как сделать эффект от опциональных клавиш по своему усмотрению? (для начала хотя бы включение и отключение Caps Lock)

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 17:11
NickLion
монах Тук
Это не VitualBox? Там правый Ctrl особое значение имеет.
Переключение языка не на Ctrl висит?
Если написать просто cat и нажать Ctrl+C прервётся? Если просто C напечатает — нажмите Enter, выведет снова C?

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 22:26
монах Тук
NickLion писал(а):
18.02.2016 17:11
Переключение языка не на Ctrl висит?
ну да, висит и пусть висит. Понимаете, это удобно для меня очень. Я годами так работал. Это из-за этого? Похоже, что из-за этого, я убрал переключение языков с Ctrl и Ctrl+C заработало нормально.

А можно как-нибудь по-другому достичь эффекта Ctrl+C? Сразу скажу, что убиение какого-либо процесса вряд ли приведёт к желаемому результату, ибо Ctrl+C не убивает, по-моему никакой процесс. По крайней мере я не заметил в htop чтобы что-то исчезало. Хотя конечно, наглядность там та ещё.

Я работаю в консоли, которая такой чёрный квадратик на панели. "Konsole Terminal", командная строка /bin/bash -l

Если чё- это самое начало Робачевского и Немнюгина

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 22:50
Bizdelnick
монах Тук писал(а):
18.02.2016 22:26
Это из-за этого?

Да. В иксах переключение раскладки реализовано по-дурацки, поэтому вешать его на клавиши-модификаторы нельзя: сочетания с их участием перестают работать.

монах Тук писал(а):
18.02.2016 22:26
Понимаете, это удобно для меня очень

Понимаем, но придётся переучиваться или страдать. Попробуйте переназначить на win/menu, всё равно ведь бесполезные клавиши.

монах Тук писал(а):
18.02.2016 22:26
Ctrl+C не убивает, по-моему никакой процесс

Конечно не убивает. Всего лишь отправляет SIGINT. Как правило, в результате процесс незамедлительно самоубивается.

монах Тук писал(а):
18.02.2016 22:26
я не заметил в htop чтобы что-то исчезало.

Сколько процессов Вы там видите, и сколько их всего запущено в системе?

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 22:53
монах Тук
Bizdelnick писал(а):
18.02.2016 22:50
Да. В иксах переключение раскладки реализовано по-дурацки, поэтому вешать его на клавиши-модификаторы нельзя: сочетания с их участием перестают работать.
мда... Так это же наше всё, как я понял. Есть какая-нибудь альтернатива иксам?

Я, кстати, давно это заметил- ни в одной программе нельзя изменить размер шрифта (Сtrl++). Ну. я не стал спрашивать, думал, я ещё мало знаю, почитаю Немнюгина. Почитал называется. Руки повырывать таким программистам.

Re: Как прервать операцию в консоли?

Добавлено: 18.02.2016 23:31
yoshakar
монах Тук писал(а):
18.02.2016 22:53
Руки повырывать таким программистам.
Но с другой стороны это стимулирует перейти на вменяемые перключатели раскладок. (По моему субъективному мнению объективно лучшим нециклическим вариантом является CapsLock.)