Ctrl+ Zостанавливает работу, а Ctrl+ Cубивает работу.
Почему это? Разве другой способ не имеет больше смысла?
z@z-lap:~$ sleep 100&
[1] 4458
z@z-lap:~$ sleep 200&
[2] 4459
z@z-lap:~$ jobs
[1]- Running sleep 100 &
[2]+ Running sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^Z
[1]+ Stopped sleep 100
z@z-lap:~$ jobs
[1]+ Stopped sleep 100
[2]- Running sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^C
z@z-lap:~$ jobs
[2]+ Running sleep 200 &
bash
shell
signals
job-control
neo0
источник
источник
Ответы:
Я думаю, что вы можете быть смущены насчет записи управления работой. В частности, «Остановлено» означает, что задание все еще живо, но его способность обрабатывать что-либо была сохранена (ему не предоставляется какое-либо время на ЦП для обработки чего-либо). Это фактически состояние «паузы» или «приостановлено», хотя это не правильный технический термин.
CtrlCне «останавливает» работу, она отменяет или убивает ее. Технически это приводит к тому, что программе посылается сигнал прерывания, говорящий о том, что она должна прервать свою работу и немедленно выйти из нее. Некоторые программы услышат этот сигнал и выполнят некоторую аварийную очистку перед выходом. Другие не будут отвечать на сигнал и впоследствии просто прерываются.
CtrlZс другой стороны, «останавливает» работу. Опять же, это делается с помощью сигнала, но на этот раз это «останов» вместо «прерывания». Это фактически удерживает его и возвращает управление оболочке, но фактически не убивает работу. Если вы хотите, чтобы такая работа продолжалась, вы можете выполнить
bg
команду, чтобы отправить последнее остановленное задание в фоновый режим. Затем он продолжит работу в качестве фонового задания, как если бы вы выполняли его с&
самого начала. Вы также можете использовать,fg
чтобы возобновить последнее остановленное задание на переднем плане (чтобы оно продолжалось с того места, на котором оно остановилось, и позволяло вам снова взаимодействовать с ним).источник
CTRL+C=SIGINT
иCTRL+Z=SIGTSTP
.