neden iki kere Ctrl + c tuşlarına basmak Linux'ta çalışan bir işlemi durdurur?


24

Program birinciden sonra durmazsa, terminallerini yürütmek için ctrl+ ciki kez yazmayı öneren Linux programları vardır, örneğin vlc .

İlk kez çalışmadığında neden ctrl+ yazmayı ciki kez kullanmalısınız?


6
[kaynak belirtilmeli]
Ignacio Vazquez-Abrams

Yanıtlar:


35

Yaptığı şey tamamen uygulamaya özeldir. ctrl+ Düğmesine bastığınızda c, terminal emülatörü ön plan uygulamasına uygun "sinyal işleyiciyi" tetikleyen bir SIGINT sinyali gönderir . SIGINT için varsayılan sinyal işleyicisi uygulamayı sonlandırır. Ancak herhangi bir program SIGINT için kendi sinyal işlemcisini kurabilir (yürütmeyi hiç durmayan bir sinyal işlemcisi dahil).

Görünüşe göre, vlc , ilk başlatıldığında bazı temizleme / zarif sonlandırma yapmaya çalışan bir sinyal işleyici yükler ve ikinci kez başlatıldığında anında sonlandırma işleminin varsayılan davranışına geri döner.


3
Bazı sistemlerde, işleyiciye yapılan çağrıdan sonra sinyal SIG_DFL'ye geri döndürülür (işleyiciyi aynı sinyalde iki kez çağırmamak için); Buna SysV anlambilimi denir. Birçok program, sinyal işleyiciyi, işleyicinin sonundaki orijinal program ayarlarına geri getirmez. Bu normalde bir programlama hatası olacaktır. Sinyal (2) kılavuz sayfası hakkında daha fazla bilgi okuyun .
Arcege

16

SIGINT , Ctrl+ tarafından gönderilen sinyal C, geleneksel olarak bir programa ana komut işleme döngüsünden çıkmasını ya da mantıklı değilse, temiz bir şekilde çıkmasını söyler. Bazı programlar SIGINT aldıklarında temizleme prosedürü uygular. Program bu kadar karışıksa, temizleme prosedürü başarısız olur, bazı programlarda, ikinci bir Ctrl+ Cprogramın hemen kapanmasına neden olur. Bunu yapmak her program yazara kalmıştır.

İkinci ise Ctrl+ Cprogramı öldürmek değil, denemek Ctrl+ \gönderdiği, SIGQUIT sinyalini , daha şiddetli (ama yine de catchable sinyali) veya denemek Ctrl+ Ziçin askıya programı ve daha sonra killörneğin (komut kill %1gönderdiği SIGTERM , bir geleneksel az şiddetli sinyali SIGQUIT’ten, 1 numaralı işe Diğerleri başarısız olursa, kill -KILLaynı zamanda, bilinmeyen olarak SIGKILLkill -9 sinyalini göndererek programı öldü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.