2011-03-27 00:39:57 +0000 2011-03-27 00:39:57 +0000
191
191

Чем отличается Ctrl+Z от Ctrl+C в командной строке Unix?

Я использую Mac OS X Terminal. И использую Ctrl+Z или Ctrl+C для остановки некоторых программ. Но я понял, что не знаю, что именно они делают. Что это такое и в чем разница между ними?

Этот вопрос был * Super User Question of the Week . Читайте 13 марта 2011 года * blog entry для более подробной информации или * submit your own ** Question of the Week.

Ответы (6)

255
255
255
2011-03-27 01:15:51 +0000

Control+Z используется для приостановки процесса, посылая ему сигнал SIGSTOP, который не может быть перехвачен программой. В то время как Control+C используется для уничтожения процесса с сигналом SIGINT, и может быть перехвачен программой, чтобы она могла почистить себя перед выходом, или не выходить вообще.

Если вы приостановите процесс, это появится в оболочке, чтобы сказать вам, что он был приостановлен:

[1]+ Stopped yes

Однако, если вы убьете процесс, вы не увидите никакого подтверждения, кроме того, что он был сброшен обратно в командную строку оболочки. Когда вы приостанавливаете процесс, вы можете делать с ним и модные вещи. Например, запуск:

fg

С программой, приостановленной, вернет ее на передний план.

И запуск команды

bg

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

Если вы хотите убить приостановленную программу, вам не нужно возвращать ее обратно с fg, вы можете просто сделать команду:

kill %1

Если у вас есть несколько приостановленных команд, запустив

jobs

, вы увидите их список, как показано ниже:

[1]- Stopped pianobar
[2]+ Stopped yes

Использование %#, где # - номер задания (номер в квадратных скобках из вывода jobs) с bg, fg, или kill, может быть использовано для выполнения действий над этим заданием.

22
22
22
2011-03-27 00:43:15 +0000

Ctrl+Z приостанавливает процесс с помощью SIGTSTP, его можно возобновить позже. Ctrl+C убивает процесс с помощью SIGINT, который завершает процесс до тех пор, пока он не будет обработан/заимствован мишенью, так что вы не можете его возобновить. Есть также SIGSTOP, который может быть отправлен по kill() и который процесс не может перехватить. SIGCONT является аналогом SIGSTOP и SIGTSTP, который не приостанавливает процесс.

18
18
18
2011-03-27 11:52:36 +0000

CTRL+Z останавливает (приостанавливает) задание

CTRL+C прерывает задание

с CTRL+C Вы не можете возобновить процесс, но с CTRL+Z задание может быть возобновлено, просто введя в команду promt:

fg %1

Если у вас несколько процессов приостановлены, то вы должны сделать

jobs

, чтобы увидеть результат и выбрать соответствующий номер, чтобы возобновить e. g.

fg %3

возобновляет третью работу из списка. Вы также можете запустить задания в фоновом режиме с

bg %n

, где n - номер задания.

3
3
3
2014-07-03 15:57:10 +0000

CTRL+Z останавливает (приостанавливает) задание

CTRL+C останавливает задание

С CTRL+C вы не можете возобновить процесс, но с CTRL+Z задание можно возобновить, просто введя в командную строку:

fg %1

Если у вас несколько процессов приостановлены, то вы должны сделать

задания

, чтобы увидеть результат.

3
3
3
2014-03-13 06:48:21 +0000
Cntrl + Z pause the currently running process.
Cntrl + C simply terminates the running process.

Uing Cntrl + C вы не можете возобновить процесс. где как с помощью Cntrl + Z вы можете возобновить процесс.

использовать fg %1 для возобновления процесса.

2
2
2
2013-02-26 17:19:22 +0000

Предыдущие ответы верны, но по каким-то неизвестным причинам Ctrl-Z также приостанавливает все дочерние процессы, но killall -SIGSTOP … только приостанавливает самый фронтовой (родительский) процесс и оставляет детей работать, как им заблагорассудится.

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

10
7
5
15
17