Хтось може сказати мені різницю між ctrl+ zі ctrl+ c?
Коли я перебуваю в терміналі, обидві комбінації зупиняють поточний процес, але яка саме різниця між обома?
Хтось може сказати мені різницю між ctrl+ zі ctrl+ c?
Коли я перебуваю в терміналі, обидві комбінації зупиняють поточний процес, але яка саме різниця між обома?
Відповіді:
Якщо ми залишимо крайові корпуси в одну сторону, різниця проста. Control+ Cдодаток перериває програму майже негайно, тоді як Control+ Zзнімає його на другий план, призупиняючи
Оболонка надсилає різні сигнали в основні програми на наступні комбінації:
Control+ C(символ управління intr
) надсилає SIGINT, який перерве програму. Зазвичай викликає його переривання, але це залежить від заявки.
Control+ Z(контрольний символ susp
) надсилає SIGTSTP до програми переднього плану, фактично розміщуючи його у фоновому режимі, призупинено. Це корисно, якщо вам потрібно вийти з чогось на зразок редактора, щоб перейти та захопити потрібні вам дані. Ви можете повернутися до програми, запустивши fg
(або %x
де x
номер завдання, як показано на рисунку jobs
).
Ми можемо перевірити це, запустивши nano TEST
, натиснувши Control+, Zа потім запустивши ps aux | grep TEST
. Це покаже нам, що nano
процес все ще працює:
oli 3278 0.0 0.0 14492 3160 pts/4 T 13:59 0:00 nano TEST
Далі ми бачимо (з тієї Т, яка знаходиться у стовпці статусу), що процес зупинено . Отже, він ще живий, але не працює ... Це можна відновити.
Деякі програми завершаться, якщо вони мають постійні зовнішні процеси (наприклад, веб-запит), які можуть затримати час очікування.
bg
(замість fg
) відмову від програми, яка була Ctrl + Z'ed, не ставлячи її назад на перший план; ефективно даючи вам контроль над оболонкою, яка запустила програму, і над самою програмою, як ніби ви використовувались &
під час запуску програми. Це часто стане в нагоді, коли ви забули почати це з &
:)
fg
ще раз!
ctrl c
або ctrl z
? Це за замовчуванням для SID (bash)?
Control+ Zпризупиняє процес ( SIGTSTP
) і Control+ Cперериває процес ( SIGINT
)
http://en.wikipedia.org/wiki/Control-Z
У системах, схожих на Unix, Control + Z є найпоширенішим відображенням клавіатури за замовчуванням для послідовності клавіш, яка призупиняє процес
http://en.wikipedia.org/wiki/Control-C
У системах POSIX послідовність призводить до того, що активна програма отримує сигнал SIGINT. Якщо програма не вказує, як впоратися з цією умовою, її припиняють. Зазвичай програма, яка обробляє SIGINT, все одно припинить себе або принаймні припинить завдання, що працює всередині неї
Ctrl+ Cвикористовується для вбивства процесу із сигналом SIGINT
, іншими словами - це ввічливе вбивство .
Ctrl+ Z використовується для призупинення процесу, надсилаючи йому сигнал SIGTSTP
, подібний до сигналу сну, який можна скасувати, і процес можна відновити знову.
Однак, коли процес призупинено, ми можемо відновити його знову fg
(відновити на передньому плані) та bg
(відновити у фоновому режимі), але я не можу відновити вбитий процес, це різниця між використанням Ctrl+ C& Ctrl+ Z.
Як ми можемо переглянути призупинені процеси?
jobs
Команда дає такий висновок:
[1]- Stopped cat
[2]+ Stopped vi
Як вбити призупинений процес у фоновому режимі?
За допомогою kill
команди:
kill %n
де n
число, відображене jobs
командою. Тож якщо я хочу вбити кота : kill %1
.
Простіше кажучи:
CTRL-C запити, щоб програма перервала .
CTRL-Z змушує програму призупинитися і відійти на другий план .
Це дозволяє відновити його пізніше за допомогою команди fg
. Залишилися фонові завдання вбиваються при виході з оболонки входу.
Це має допомогти
Ctrl+ Zвикористовується для призупинення процесу шляхом надсилання йому сигналу SIGSTOP, який не може бути перехоплений програмою. У той час як Ctrl+ Cвикористовується для вбивства процесу із сигналом SIGINT, і його може перехопити програма, щоб він міг очистити себе перед виходом або взагалі не виходити.
SIGTSTP
, яку може спіймати програма. Є чотири різних сигналів, які можуть призупинити програму SIGSTOP
, SIGTSTP
, SIGTTIN
, SIGTTOU
. З них лише SIGSTOP
неможливо заблокувати. Інші три використовуються терміналом для зупинки процесу в різних умовах.
коли ви натискаєте ctrl+ c, це означає, що ви надсилаєте SIGINT до свого процесу. як ви вводите наступну команду: kill -SIGINT <your_pid>
. Це вб'є вам ваш процес. Ось чому ви його не бачите при видачі команди ps .
Коли ви натискаєте ctrl+ z, це означає, що ви відправляєте SIGSTOP у ваш процес. як ви вводите наступну команду: kill -SIGKSTOP <your_pid>
. Це зупинить ваш процес, але процес все ще живий. Таким чином, ви можете знову активувати процес, надіславши SIGCONT до свого процесу.