Возможный дубликат:
Что делать, если Ctrl-C не может убить процесс?

На моем ноутбуке я нажимаю функциональную клавишу ноутбука + перерыв. На моем рабочем столе мой ключ прерывания (рядом с экраном печати) выглядит так:

Pause
Break

Если я нажимаю его (без Ctrl/Alt/ и т.д.), Я получаю это (игнорируйте эхо, они просто есть, чтобы я мог понять, что к чему):

# sleep 10;echo "no ctrl/alt/shift/etc"

[12]+  Stopped                 sleep 10

Если я нажимаю это со сдвигом, я получаю это:

[root@ID6052 public_html]# sleep 10;echo "shift + pause/break"

[13]+  Stopped                 sleep 10

Если я нажимаю его с помощью Ctrl, ничего не происходит.

Если я нажимаю Pause/Break с Alt, я получаю это:

[root@ID6052 public_html]# sleep 10;echo "alt + pause/break"

[15]+  Stopped                 sleep 10

Как мне заставить его просто остановить программу? Если я получаю список запущенных процессов, все эти команды «[xx]+ Stopped ...» отображаются (в остановленном состоянии). На моем ноутбуке нажатие кнопки func+ break (т. Е. Просто клавиши обычного прерывания ... кнопка func также используется для блокировки прокрутки, экрана печати и т.д.) Полностью закрывает программы!

4 ответа4

3

Обычно оболочка Unix будет иметь следующие сопоставления клавиш

control-C => SIGINT (прерывание)
control-Z => SIGTSTP (терминальная остановка / приостановка)

иногда есть
control-y => отложенная остановка (не знаю, как это сделать)

Control-C обычно прерывает и завершает вашу программу. Но SIGINT может обрабатываться и игнорироваться или обрабатываться программой.

Control-Z обычно приостанавливает (останавливает) вашу программу. Но SIGSTSP также может обрабатываться и игнорироваться или обрабатываться программой, хотя на практике это кажется более редким, чем обработка SIGINT.

Отправка SIGSTOP (kill -STOP из другого терминала) приостановит (остановит) вашу программу и не может быть обработана.

Похоже, что комбинации клавиш, которые приводят к остановке вашей программы, вероятно, эквивалентны Control-Z.

Если вы получаете процессы в остановленном состоянии, ваша оболочка сообщает номер задания. Похоже, вы используете Bash. В любом случае, большинство оболочек позволит вам контролировать остановленные или фоновые задания, используя их номера.

kill -KILL %1
kill -9 %1
bg %1
fg %1

И так далее, убивать, убивать, ставить в фоновом режиме или ставить на первый план свою (первую) работу соответственно.

Вы можете использовать команду

jobs

Чтобы просмотреть список заданий, в настоящее время связанных с оболочкой, в которой вы находитесь. Ну, в зависимости от того, какая это оболочка, а какая не указана.

2

Попробуйте: control-C

1

Вы можете использовать Ctrl - C, чтобы завершить выполнение программы в терминале.

Вы можете убить программы, которые уже были остановлены с помощью kill:

kill PID

где PID - это идентификатор процесса (число, которое вы увидите в выводе ps ):

[john@awesome]$python
Python 2.4.3 (#1, Sep 17 2008, 16:04:01)
[GCC 4.1.2 20071124 (Red Hat 4.1.2-41)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
[1]+  Stopped                 python
[john@awesome]$ps
  PID TTY          TIME CMD
 3560 pts/1    00:00:00 bash
 3588 pts/1    00:00:00 python
 3609 pts/1    00:00:00 ps

Использование kill без каких-либо ключей аналогично использованию -TERM . Он попытается изящно закрыть программу. Если он по-прежнему не отвечает, вы можете принудительно kill его kill -9 , хотя это и не рекомендуется, поскольку он может оставить файлы из открытых буферов.

0

Существует два основных способа прерывания работающей программы из терминала Unix:

  1. Ctrl - c отправит сигнал INT (Interrupt), который по умолчанию завершит работу программы, но некоторые программы отменяют это.
  2. Ctrl - \ отправит сигнал QUIT, который чаще всего останавливает выполнение программы, но часто не завершается так же чисто.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .