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

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

  

Этот вопрос был Суперпользовательский вопрос недели .
  Прочитано 13 марта 2011 г. запись в блоге для получения дополнительной информации или отправьте свои собственные Вопрос недели.

177 голосов | спросил Eonil 27 MaramSun, 27 Mar 2011 04:39:57 +04002011-03-27T04:39:57+04:0004 2011, 04:39:57

6 ответов


234

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, можно использовать для выполнения действия над этим заданием.

ответил Wuffers 27 MaramSun, 27 Mar 2011 05:15:51 +04002011-03-27T05:15:51+04:0005 2011, 05:15:51
22

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

ответил Ben Voigt 27 MaramSun, 27 Mar 2011 04:43:15 +04002011-03-27T04:43:15+04:0004 2011, 04:43:15
17

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

CTRL + C завершает работу

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

fg %1

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

jobs

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

fg %3

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

bg %n

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

ответил g24l 27 MarpmSun, 27 Mar 2011 15:52:36 +04002011-03-27T15:52:36+04:0003 2011, 15:52:36
3
Cntrl + Z pause the currently running process. 

И

Cntrl + C simply terminates the running process.

Используя Cntrl + C, вы не можете возобновить процесс. где, используя Cntrl + Z, вы можете возобновить процесс.

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

ответил Ravindra Miyani 13 MaramThu, 13 Mar 2014 10:48:21 +04002014-03-13T10:48:21+04:0010 2014, 10:48:21
3

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

CTRL + C завершает работу

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

  

fg% 1

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

  

работы

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

ответил abul 3 J000000Thursday14 2014, 19:57:10
2

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

ответил Kostas 26 FebruaryEurope/MoscowbTue, 26 Feb 2013 21:19:22 +0400000000pmTue, 26 Feb 2013 21:19:22 +040013 2013, 21:19:22

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132