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


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

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


177
2018-03-27 00:39


происхождения




ответы:


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

Если вы приостановите процесс, это будет отображаться в оболочке, чтобы сообщить, что оно приостановлено:

[1]+  Stopped                 yes

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

fg

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

И запустив команду

bg

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

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

kill %1

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

jobs

перечислит их следующим образом:

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

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


234
2018-03-27 01:15



Вы можете изменить, какие клавиши выполняют эту работу, используя stty команда. Например stty susp ^Z  или stty intr ^C, - RedGrittyBrick
Фактически, он отправляет SIGTSTP, который может быть перехвачен. - Simon Richter
Круто! Так что если программа отказывается умереть с помощью Ctrl + C, как вы ее убиваете? - Aditya M P
@adityamenon Найдите имя исполняемого файла, например amarok и запустить killall amarok, или запустить ps aux и найдите идентификатор процесса рядом с исполняемым именем и запустите kill {process id}, - Bruno Finger


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


22
2018-03-27 00:43



Нет, это SIGTSTP, а не SIGSTOP, и его можно перехватить. - sch
@sch, это правильно сейчас? - Ben Voigt
Да, хотя Ctrl-Z (и CTRL-C) вызывает процесс группа (группа процесса переднего плана терминала) для приема этого сигнала, а не только один процесс. Также обратите внимание, что SIGTTIN и SIGTTOU отправляются процессам, не входящим в группу процессов переднего плана терминала, после чего пытаются прочитать или записать из / на него, что также приостанавливает их. - sch
@sch: Разве процесс против группы не отличается только тем, как посылается сигнал? IIRC kill() позволяет отправлять SIGSTOP к группе просто отлично. - Ben Voigt
Да, моя команда была о вашем CTRL-Z приостанавливает процесс ... которые могут ввести людей в заблуждение, считая, что они отправляются только одному процессу, когда это на самом деле работа или группа процессов, - sch


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

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

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

fg %1

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

jobs

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

fg %3

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

bg %n

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


17
2018-03-27 11:52



Это рабочие места (группы процессов), а не процессы, с которыми имеют дело CTRL-C, CTRL-Z, fg и bg. - sch


Cntrl + Z pause the currently running process. 

А также

Cntrl + C simply terminates the running process.

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

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


3
2018-03-13 06:48





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

CTRL+Спрекращает работу

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

fg% 1

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

работы

чтобы увидеть выход.


3
2017-07-03 15:57





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


2
2018-02-26 17:19