Unix komut satırında Ctrl + Z ve Ctrl + C arasındaki fark nedir?


Yanıtlar:


250

Control+ Z, bir işlemin SIGSTOPprogram tarafından yakalanamayacağı bir sinyal göndererek askıya alınması için kullanılır . İken Control+ Csinyalli bir süreç öldürmek için kullanılır SIGINTve bu çıkmadan önce kendi kendini temizlemek böylece bir program tarafından ele geçirilebilir, ya da hiç çıkmak değil.

Bir işlemi askıya alırsanız, bu işlemin askıya alındığını bildirmek için kabukta görünecektir:

[1]+  Stopped                 yes

Bununla birlikte, birini öldürürseniz, kabuk istemine geri bırakılmaktan başka bir onay görmezsiniz. Bir işlemi askıya aldığınızda, onunla da süslü şeyler yapabilirsiniz. Örneğin, bu çalışan:

fg

Bir program askıya alındığında onu ön plana çıkaracak.

Ve komutu çalıştırmak

bg

Bir program askıya alındığında arka planda çalışmasına izin verir (programın çıktısı yine de TTY'ye gidecektir).

Askıya alınmış bir programı öldürmek istiyorsanız, fgilk önce onu geri getirmek zorunda değilsiniz, basitçe şu komutu yapabilirsiniz:

kill %1

Birden fazla askıya alınmış komutunuz varsa,

jobs

onları şöyle listeler:

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

Bu işin yapılması için iş numarasının ( çıktıdan köşeli parantez içinde olan ) %#nerede #olduğu veya kullanılması jobsile bg, kullanılabilir.fgkill


3
sttyKomutu kullanarak hangi tuşların hangi işi yapacağını değiştirebilirsiniz . Örneğin stty susp ^Z veya stty intr ^C.
RedGrittyBrick

7
Aslında, ele geçirilebilecek SIGTSTP'yi gönderir.
Simon Richter

2
Güzel! Bir program Ctrl + C ile ölmeyi reddediyorsa, onu nasıl öldürmeye zorlarsınız?
Aditya MP,

2
@adityamenon Çalıştırılabilir adı bulun, örneğin amarokçalıştırın ve çalıştırın killall amarokveya çalıştırılabilir ps auxadın yanındaki işlem kimliğini çalıştırın ve bulun ve çalıştırın kill {process id}.
Bruno Finger

22

Ctrl + Z, SIGTSTP ile işlemi askıya alır, daha sonra devam edebilirsiniz. Ctrl + C işlemi, hedef tarafından ele alınmadığı / yok sayılmadığı sürece işlemi sonlandıran SIGINT ile öldürür, böylece devam ettiremezsiniz. Ayrıca, gönderilebilen kill()ve sürecin ele geçiremediği bir SIGSTOP da var . SIGCONT, süreci askıya alan hem SIGSTOP hem de SIGTSTP'nin karşılığıdır.


Hayır, bu SIGTSTP değil, SIGSTOP değil ve ele geçirilebilir.
sch

@sch, bu şimdi doğru mu?
Ben Voigt

Evet, Ctrl-Z (ve CTRL-C), bir işlem grubunun (terminalin ön plan işlem grubu) bu sinyali almasına neden olur, ancak yalnızca bir işlem gerekmez. Ayrıca, SIGTTIN ve SIGTTOU'nun terminalin ön plan işlem grubunda olmayan ve daha sonra bunları okumaya veya yazmaya çalışarak bunları askıya alan işlemlere gönderildiğine dikkat edin.
sch

@sch: İşlem vs grup sadece sinyalin gönderilme şeklindeki bir fark değil midir? IIRC iyi bir gruba kill()göndermenizi sağlar SIGSTOP.
Ben Voigt

Evet, benim emrim, CTRL-Z'iniz hakkındaydı. İşlemi askıya alıyor ... ki bu aslında bir ya da süreç grubu olduğunda, insanların sadece bir işleme gönderildiğini düşünmesine yanlış yönlendirebilir .
sch

17

CTRL + Z bir işi durdurur (duraklatır)

CTRL + C bir işi sonlandırır

CTRL + C ile işlemi sürdüremezsiniz, ancak CTRL + Z ile işe sadece komut satırına girilerek devam edebilirsiniz:

fg %1

duraklatılmış birden fazla işleminiz varsa, yapmanız gerekenler

jobs

Çıktıyı görmek ve devam ettirmek için uygun numarayı seçmek

fg %3

Listedeki üçüncü işi sürdürür. Ayrıca arka planda çalışan işleri de yapabilirsiniz.

bg %n

burada iş numarası n'dir.


Bu işler (süreç grupları), CTRL-C, CTRL-Z, fg ve bg ile ilgilenen süreçler değil.
sch

3
Cntrl + Z pause the currently running process. 

Ve

Cntrl + C simply terminates the running process.

Cntrl + C kullanarak işlemi devam ettiremezsiniz. Cntrl + Z kullanarak işlemi devam ettirebilirsiniz.

Süreci devam ettirmek için fg% 1 öğesini kullanın.


3

CTRL+ Zbir işi durdurur (duraklatır)

CTRL+ Cbir işi sonlandırır

CTRL+ İle Cişlemi devam ettiremezsiniz, ancak CTRL+ Zile iş sadece komut istemine girilerek devam ettirilebilir:

% 1 fg

Duraklatılmış birden fazla işleminiz varsa, yapmanız gerekenler

Meslekler

çıktıyı görmek için.


2

Önceki cevaplar doğrudur, ancak bilinmeyen bir nedenden ötürü Ctrl-Z, tüm çocuk süreçlerini de askıya alır, fakat killall -SIGSTOP ... sadece en öndeki (ebeveyn) süreci askıya alır ve çocukları istedikleri gibi çalıştırır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.