ctrl c проти ctrl z із завданням переднього плану


26

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 &

4
"Хіба інший спосіб не мав би більше сенсу?" Не могли б ви вказати, чому ви думаєте, що це буде?
glglgl

Відповіді:


55

Я думаю, що вас можуть збентежити нотації контролю за роботою. Помітно "Зупинка" означає, що робота ще жива, але її здатність обробляти що-небудь було збережено (CPU не надає часу, щоб щось обробити). Це фактично стан "Призупинення" або "Призупинення", хоча це не правильний технічний термін.

  • CtrlCне "зупиняє" роботу, її скасовує або вбиває. Технічно це призводить до того, що в програму надсилається сигнал переривання, який повідомляє йому перервати те, що вона робить, і негайно вийти. Деякі програми почують цей сигнал і виконають аварійну очистку над собою перед виходом. Інші не реагують на сигнал і згодом просто переривають.

  • CtrlZз іншого боку, "зупиняє" роботу. Знову це робиться за допомогою сигналу, але цього разу це «стоп» замість сигналу «переривання». Це ефективно ставить його на режим очікування і повертає контроль до оболонки, але насправді не вбиває роботу. Якщо ви хочете, щоб така робота продовжувала працювати, ви можете видати bgкоманду для надсилання останньої зупиненої роботи на другий план. Потім воно буде продовжуватись виконуватись як фонове завдання, як ніби ви його виконували &в першу чергу. Ви також можете використовувати fgдля відновлення останньої зупиненої роботи на передньому плані (дозволяючи їй продовжуватись там, де вона припинилася, і дозволяти вам знову взаємодіяти з нею).


Я все ще думаю, що Ctrl + Z посилає SIGKILL, а Ctrl + C посилає SIGINIT. Тож Ctrl + Z також вбиває роботу. Але з мого прикладу Ctrl + Z лише зупиняє роботу, як ви сказали. Тож мене це трохи заплутало.
neo0

10
@ neo0 - можливо, ти звик до якихось дивних налаштувань? Ви можете налаштувати ці речі, хоча ви, мабуть, не повинні, якщо у вас є програма, яка спирається на ці карти. Але конфігурація за замовчуванням є CTRL+C=SIGINTі CTRL+Z=SIGTSTP.
mikeserv

3
Калеб правильний (+1). Ctrl-Z зупиняє програму, яку ви повинні розцінювати як "заморожування" її, але ця програма все ще знаходиться в пам'яті, її файли відкриваються і т. Д. Вона не вбивається / не припиняється.
Олів'є Дулак

"Призупинення" може бути зрозумілішим, ніж "зупинка".
Рассел Борогов

1
@jiggunjer Це стосується форми речей. Ця відповідь дає деяку інформацію про те, чому потрібно два кроки, і цей вводить деякі функції, щоб зробити ці кроки більш безболісними.
Калеб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.