182

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

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

6 ответов6

241

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

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

17

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

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

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

fg %1

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

jobs

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

fg %3

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

bg %n

где n - номер работы.

3
Cntrl + Z pause the currently running process. 

А также

Cntrl + C simply terminates the running process.

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

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

3

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

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

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

фг% 1

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

работы

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

2

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

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