Terminaldeki Ctrl-z ve Ctrl-c arasındaki fark nedir?


120

Birisi bana ctrl+ zile ctrl+ arasındaki farkı söyleyebilir cmi?

Terminalde olduğumda, her iki kombinasyon da mevcut işlemi durdurur, fakat ikisi arasındaki fark tam olarak nedir?


Burada çok benzer bir soru sordum: unix.stackexchange.com/questions/116959/…
ThorSummoner


evet, ikisi arasındaki farkı anlamakta başarılı oldum !!
chaitanya lakkundi

Buraya eklemek istediğim bir şey var: Erkeklerin çoğunun (benim profesyonel çevremde) aralarında ayrım yapmıyor. Ve komutu sonlandırmak için CTRL-Z seçeneğini kullandık. Bu yanlış bir uygulamadır. Tüm bu durumlarda CTRL-C kullanmanız gerekir. CTRL-Z'nin basitçe arka planda olduğu gibi. Bu yüzden, işlem tamamlanana kadar işlem sonlandırılmadı, Sonlandırmak için CTRL-Z düğmesine basıldığında Kullanıcının (çoğu zaman) isteği olmayabilir.
kuldeep.kamboj

Yanıtlar:


156

Kenar kasaları bir tarafa bırakırsak aradaki fark basittir. Control+ Chemen askıya alınırken Control+ Zarka plana taşınırken uygulamayı hemen iptal eder .

Kabuk, bu kombinasyonlardaki temel uygulamalara farklı sinyaller gönderir:

  • Control+ C(kontrol karakteri intr), uygulamayı durduracak SIGINT'i gönderir. Genellikle onu iptal etmesine neden olur, ancak bu karar vermek için uygulamaya bağlıdır.

  • Control+ Z(kontrol karakteri susp) SIGTSTP'yi ön plan uygulamasına gönderir, arka planda etkin bir şekilde askıya alır. İhtiyaç duyduğunuz bazı verileri almak ve almak için bir editör gibi bir şeyden ayrılmanız gerekirse, bu kullanışlıdır. Çalıştırarak uygulamaya geri dönebilirsiniz fg(veya gösterilen iş numarası %xnerede ).xjobs

    Bunu çalıştırarak nano TEST, sonra Control+ 'ya Zve ardından çalıştırarak test edebiliriz ps aux | grep TEST. Bu bize nanosürecin hala çalıştığını gösterecektir :

    oli     3278  0.0  0.0  14492  3160 pts/4    T    13:59   0:00 nano TEST
    

    Ayrıca, sürecin durduğunu görebiliriz (durum sütununda bulunan T'den) . Öyleyse hala yaşıyor, ama bitmiyor ... Devam ettirilebilir.

    Bazı uygulamalar, uykudayken zaman aşımına uğrayabilecek devam eden dış işlemlere (web isteği gibi) sahipse çökecektir.


51
Ctrl + Z'ed olan bir uygulamanın tekrar ön plana çıkarmadan çalıştırılmasının bg(yerine fg) çalıştırılmasının mümkün olduğunu eklemeye değer ; etkin bir şekilde size uygulamayı başlatan her iki kabuğun kontrol vererek ve siz kullanmışsınız gibi, uygulamanın kendisini uygulamayı başlatırken. Bu, genellikle başlatmayı unuttuğunuzda işe &&
yarar.

6
Ve fgtekrar yazarak bu işleme geri dönebilirsiniz !
sleblanc

4
Askıya alınmış veya arka planda birden fazla iş olması durumunda: "işler" bunları listeler ve "% fg% n" veya "% b" .
Olivier Dulac,

3
@Oli: İkinci paragrafınız “Kabuk [s]… altta yatan uygulamalara sinyal gönderir…” der. Hayır, işletim sistemi / terminal sürücüsü sinyalleri gönderir. (Bir pencere sisteminde, pencere yöneticisi bir rol oynayabilir.) Ayrıca, tamamlanmış olmak (orijinal sorunun kapsamı dışında olsa da), Ctrl + \ 'den söz etmek isteyebilirsiniz.
Scott,

Nasıl oturumun yaptıktan sonra ön plana dönmek olan süreç grubu biliyor ctrl cya ctrl z? Varsayılan olarak SID (bash)?
jiggunjer 9:16

16

Control+ Zbir işlemi askıya alır ( SIGTSTP) ve Control+ bir işlemi durdurur C( SIGINT)

http://en.wikipedia.org/wiki/Control-Z

Unix benzeri sistemlerde, Control + Z, bir işlemi askıya alan anahtar dizisi için en yaygın varsayılan klavye eşlemesidir

http://en.wikipedia.org/wiki/Control-C

POSIX sistemlerinde, dizilim aktif programın bir SIGINT sinyali almasına neden olur. Program bu koşulun nasıl ele alınacağını belirtmiyorsa, sonlandırılır. Genelde bir SIGINT'i işleyen bir program hala kendini sona erdirir veya en azından içinde çalışan görevi sonlandırır


1
İyi iş ilanı gönderme. Ancak, genel anlamda konuşursak, Wikipedia teknik referanslama için çok iyi bir kaynak değil.
Aaron,

3
@ BryceAtNetwork23 bu çok doğru; Bu durumda, Wikipedia tanımının yeterince yeterli olduğunu hissettim. Gelecekte daha fazla teknik referans arayacağım!
Uyku Yoksun Bulbasaur,

14

Ctrl+ Csinyalli bir işlemi öldürmek için kullanılır SIGINT, başka bir deyişle kibar bir ölümdür .

Ctrl+ Z , bir işlemi askıya almak için SIGTSTP, uyku sinyali gibi olan ve geri alınabilen ve işlemin yeniden başlatılabileceği sinyalini göndererek kullanılır .

Bununla birlikte, bir işlem askıya alındığında, fg(ön planda devam ederek) ve bg(arka planda devam ederek) tarafından tekrar devam edebiliriz, ancak öldürülen bir işleme devam edemem, bu Ctrl+ C& Ctrl+ kullanımı arasındaki farktır Z.

Nasıl olabilir görüntülemek askıya süreçleri?

jobsKomut böyle çıktıyı verir:

[1]-  Stopped                 cat
[2]+  Stopped                 vi

Askıya alınmış bir süreç arka planda nasıl öldürülür ?

killKomutu kullanarak :

kill %nkomut ntarafından görüntülenen sayı nerede jobs. Kediyi öldürmek istiyorsak: kill %1.


1
Bu konudaki diğer yorumlara göre, düzeltme: ctrl-z bir SIGTOP değil, bir SIGTSTP sinyali gönderir.
Ocak'ta 19:17

% 1 öldürme bana söyler - İşleme izin verilmiyor. Neden öyle? Teşekkürler
Satya Prakash

7

Basitçe söylemek gerekirse:

  • CTRL-C programın iptal edilmesini ister .

  • CTRL-Z Programı askıya almaya ve arka plana girmeye zorlar .

    Bu, daha sonra komut ile devam etmenizi sağlar fg. Giriş kabuğundan çıktığınızda kalan arka plan görevleri öldürülür.


5

Bu yardımcı olmalı

Ctrl+ Zbir işlemi askıya almak için program tarafından yakalanamayan SIGSTOP sinyalini göndererek kullanılır. İken Ctrl+ Csinyal SIGINT ile bir süreç öldürmek ve Çıkmadan önce kendi kendini temizlemek böylece bir program tarafından ele geçirilebilir, ya da hiç çıkmak değil kullanılmaktadır.


4
Bu tamamen doğru değil. SIGTSTPProgram tarafından yakalanabilecek olan gönderir . Dört farklı bir program askıya alabilir sinyaller vardır SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU. Bunlardan sadece SIGSTOPengellenemez. Diğer üçü terminal tarafından farklı koşullar altında işlemi durdurmak için kullanılır.
kasperd

4

ctrl+ tuşuna bastığınızda c, SIGINT'i işleminize gönderdiğiniz anlamına gelir. gibi bu komutu yazın: kill -SIGINT <your_pid>. Bu senin sürecini öldürür. Bu yüzden ps komutunu verirken göremiyorsunuz .
Tuşuna bastığınızda ctrl+ z, sizin sürecine SIGSTOP göndermek anlamına gelir. gibi bu komutu yazın: kill -SIGKSTOP <your_pid>. Sürecini durduracak, ancak süreç hala hayatta. Böylece işleminize SIGCONT göndererek işleminizi tekrar aktif hale getirebilirsiniz.

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.