Menü
ücretsiz
Kayıt
Ev  /  Kurulum ve kurulum/ Linux xfce'de askıya alınmış bir işlem nasıl sonlandırılır. Linux'ta Kill komutunda uzmanlaşma

Linux xfce'de askıya alınmış bir işlem nasıl sonlandırılır. Linux'ta Kill komutunda uzmanlaşma

Sinyaller yazılım kesintileridir. UNIX ve Linux, Mac OS gibi UNIX benzeri işletim sistemlerindeki süreçler arasındaki iletişim için kullanılırlar.

Sinyaller, 1970'lerde Bell Labs UNIX'ten beri kullanılmaktadır ve artık resmi olarak POSIX standardı tarafından tanımlanmaktadır. Bir işleme bir sinyal geldiğinde, işletim sistemi işlemin normal yürütme akışını keser ve bildirim sağlar.

Hangi işletim sistemini kullanıyor olursanız olun, kesinlikle uygulamalarınızın engellendiğini ve düzgün çalışmayı reddettiğini göreceksiniz. Unix'te, Linux'ta, bir işlemi hemen sonlandırmak için kullanabileceğiniz bir "kill" komutu var ama sadece bu değil, bundan biraz sonra bahsedeceğim. “Unix/Linux'ta Kill komutu” başlıklı bu yazımda kill yardımcı programının çeşitli komutlarını hazır örnekler üzerinden anlatacağım ve göstereceğim.

komutları ve sinyalleri öldür

"Kill" komutunu verdiğinizde, aslında sisteme bir sinyal gönderiyor ve yanlış uygulama robotunu sonlandırması talimatını veriyorsunuz. Kullanılabilecek toplam 60 sinyal var, ancak gerçekten bilmeniz gereken tek şey SIGTERM(15) ve SIGKILL(9).

Tüm sinyalleri şu komutla görüntüleyebilirsiniz:

# öldür -l

macOS'imde:

Tüm sinyallerden bahsetmeye çalışacağım ama en başta sadece en önemli ve sık kullanılanlardan bahsedelim.

Temel Sinyaller

Aşağıdaki sinyaller POSIX standardının bir parçasıdır. Her sinyal, içinde tanımlanan bir makrodur. Sistem başlık dosyası. Genellikle SIG ön eki olmadan kısaltılırlar; örneğin SIGHUP, genellikle basitçe HUP olarak anılır.

SIGTERM– Bu sinyal, çalışan bir işlemin sonlandırılmasını talep eder. Bu sinyal göz ardı edilebilir.Sürecin güzelce kapanması için süre verilir. Bir program düzgün bir şekilde kapandığında, ilerlemesini kaydetmesi ve kaynakları serbest bırakması için ona zaman verildiği anlamına gelir. Başka bir deyişle, sürecin sonlandırılmasını "zorlamadı".

SIGKILL SIGKILL sinyali, sürecin işini yapmayı hemen durdurmasına neden olur. Program bu sinyali yok sayamaz. Kaydedilmemiş ilerleme kaybolacak.

"öldürmek" için sözdizimi.

Komut sözdizimi şöyledir:

# PID'leri öldür

# öldür [-s] [-l] %pid

Varsayılan sinyal (belirtilmemişse) SIGTERM'dir. Bu sinyal yardımcı olmadığında ve çalışmadığında, işlemi sonlandırmaya zorlamak için aşağıdaki "kill" seçeneklerini kullanabilirsiniz:

# SIGKILL PID'i öldür

# öldür -9 PID

"-9", SIGKILL sinyalinin bayrağıdır.

Kurtulmak için hangi uygulama PID'sini kullanacağınızı bilmiyorsanız, şu komutu çalıştırın:

$ ps -yardımcı

Belirli bir uygulamayı (örneğin, apache) biliyorsanız, gereksiz olanları ayıklayabilir ve bu hizmet için tüm işlemleri görüntüleyebilirsiniz:

$ ps -yardımcı | grep apache

Ve bu, çalışan tüm uygulamaları PID(ler)iyle birlikte gösterecektir.

Örneğin, bir uygulamayı sonlandırmak için aşağıdaki komutu çalıştırıyorum:

# öldür -9 3629

Ayrıca, "öldürülebilmeleri" için aynı anda birden çok işlemi çalıştırabileceğinizi de belirtmekte fayda var:

# öldür -9 PID1 PID2 PID 3

Yapılandırma dosyalarını yeniden yükleyin veya yardımcı programları yeniden başlatın:

# kill -1 PID sayısı

Özellikle yararlı sinyaller arasında HUP, INT, kill, STOP, CONT ve 0 bulunur.

Seçenekler şunlardır:

-s sinyal_adı
Varsayılan olmayan bir sinyalin gönderileceği sinyali belirten bir sinyalin sembolik adı.

-l
İşlenen belirtilmemişse, sinyal adlarını göster; Aksi takdirde, çıkış_durumuna karşılık gelen sinyalin adını yazın.

-sinyal_adı
Varsayılan olarak TERM'e gönderilecek sinyali belirten bir sinyalin sembolik adı.

-sinyal_numarası
Varsayılan olarak TERM'e gönderilecek sinyali belirten, negatif olmayan bir ondalık tamsayı.

Aşağıdaki PID'ler özellikle önemlidir:
-1 Süper kullanıcı ise, sinyali tüm işlemlere yayınlayın; aksi halde tüm süreçlere yayınla-
kullanıcı için.

En sık kullanılan sinyallerden bazıları şunlardır:

  • 1 HUP (kapat) - kapat.
  • 2 INT (kesme) - kesme.
  • 3 ÇIKIŞ (çık) - çıkış.
  • 6 ABRT (iptal) - kesintiler.
  • 9 KILL (yakalanamaz, yok sayılamaz öldürme)
  • 14 ALRM (çalar saat) - çalar saat.
  • 15 TERM (yazılım sonlandırma sinyali)

PKill

"pkill" komutu, genişletilmiş normal ifade kalıplarını ve diğer eşleştirme ölçütlerini kullanmanıza izin verir. PID kullanmak yerine artık işlem adını girerek uygulamayı sonlandırabilirsiniz. Örneğin, Firefox tarayıcısını kapatmak için şu komutu çalıştırmanız yeterlidir:

#pkillFirefox

Bir normal ifade modeliyle eşleştiğinden, işlem adının bir bölümünü de girebilirsiniz, örneğin:

#pkillfire

Yanlış işlemleri "öldürmekten" kaçınmak için, uygun işlemler listesine "pgrep -l [işlem adı]" yapabilirsiniz.

pkill komutu daha birçok seçeneğe sahiptir, örneğin "-u" seçeneğini belirtirseniz, bir kullanıcı adı veya kimlik belirtmenize olanak tanır. Bu örnekte, TERM sinyalini 'hiçkimse' kullanıcısının sahip olduğu tüm işlemlere gönderiyoruz:

# pkill -u kimse

Hepsini öldür

Killall, PID yerine işlem adını kullanır ve aynı ada sahip tüm işlem örneklerini "öldürür". Örneğin, Firefox tarayıcısının birden çok örneğini çalıştırıyorsanız, hepsini şu komutla sonlandırabilirsiniz:

# tüm firefox'u öldür

Gnome'da Nautilus'u şu komutla yeniden başlatabilirsiniz:

# tüm nautilus'u öldür

xkill

Xkill, bir uygulamayı "öldürmenin" grafiksel bir yoludur. Terminalde "XKill" yazdığınızda, fare imleci hemen "çapraz" olacaktır. Tek yapmanız gereken rahatsız edici uygulamada "çapraz" tıklamak ve bu, uygulamayı anında öldürecektir. Eğer ilgileniyorsanız, XKill özelliğini etkinleştirmek için bir klavye kısayolu ekleyebilirsiniz.

Kullanılan diğer sinyaller

SİGABRT

Bu sinyal, işlemi iptal etmek için işleme bir sinyal gönderir. ABRT, bir iptal sinyali vermek için C programlama dilinin abort() işlevini çağırdığında genellikle işlemin kendisine yöneliktir, ancak diğer herhangi bir sinyal gibi herhangi bir işlemden yönlendirilebilir.

SIGALRM, SIGVTALRM ve SIGPROF

Bir alarm işlevi (örn. setitimer) çağrılırken belirtilen zaman sınırı sona erdiğinde, bir işleme bir ALRM, VTALRM ve/veya PROF sinyali gönderilir.

ALRM

Şimdiki zaman veya saat geçtiğinde gönderilir.

VTALRM

İşlem tarafından kullanılan CPU süresi dolduğunda gönderilir.

PROF.

İşlem ve sistem tarafından işlem adına kullanılan işlemci süresi dolduğunda gönderilir.

SIGBUS

Bir veri yolu hatasıyla sonuçlandığında, bir işleme bir BUS sinyali gönderilir. Yanlış bellek erişim hizalaması veya eksik fiziksel adres gibi bu sinyalle sonuçlanan koşullar.

SIGCHLD

CHLD sinyali, bir alt süreç sona erdiğinde, kesintiye uğradığında veya kesintiye uğradıktan sonra kaldığı yerden devam ettiğinde işleme gönderilir. Bir sinyalin yaygın kullanımlarından biri, açık bir sistem çağrısı olmadan tamamlandıktan sonra bir alt süreç tarafından kullanılan kaynakları temizlemesi için işletim sistemine sinyal göndermektir.

SIGCONT

CONT sinyali, işletim sistemine daha önce bir STOP veya TSTP sinyali tarafından askıya alınan bir işlemi yeniden başlatma talimatı verir. Bu sinyalin önemli özelliklerinden biri, Unix kabuğundaki işlemi kontrol etmektir.

SIGFPE

FPE sinyali, sıfıra bölme gibi hatalı bir aritmetik işlem gerçekleştirdiğinde işleme gönderilir.

iç çekiş

HUP sinyali, kontrol terminali kapatıldığında işleme gönderilir. Başlangıçta, ardışık bir satır düşüşünden sonra bir işlemi bildirmek için tasarlanmıştır ("takılmalardan" HUP sorumludur). Modern sistemlerde bu sinyal genellikle sözde veya sanal terminal kontrolünün kapatıldığı anlamına gelir.

İŞARET

Kötü amaçlı, bilinmeyen veya ayrıcalıklı komutları (talimatları) yürütmeye çalıştığında bir işleme gönderilen ILL sinyali.

SIGINT

INT sinyali, kullanıcı işlemi sonlandırmak istediğinde kontrol terminalinden bir işleme gönderilir. Bu genellikle Control-C tuşlarına basılarak başlatılır, ancak bazı sistemlerde "sil" veya "break".

SIGKILL

KILL sinyali, hemen sonlandırmak için bir işleme gönderilir. SIGTERM ve SIGINT'ten farklı olarak, bu sinyal yakalanamaz veya yok sayılamaz ve alıcı işlem bu sinyali aldıktan sonra herhangi bir temizleme işlemi gerçekleştiremez.

SIGPIPE

PIPE sinyali, diğer uca bağlı bir proses olmadan bir boruya yazmaya çalıştığında prosese gönderilir.

SIGQUIT

QUIT sinyali, kullanıcı sürecin dökümünü istediğinde kontrol terminalinden bir sürece gönderilir.

SIGSEGV

SEGV sinyali, geçersiz bir sanal bellek referansı veya segmentasyon hatası yaptığında, yani bir segmentasyon hatası gerçekleştirdiğinde bir işleme gönderilir.

SIGSTOP

STOP sinyali, işletim sistemine daha sonra devam etmesi için işlemi durdurmasını söyler.

SIGTERM

TERM sinyali, sonlandırılmasını talep etmek için bir işleme gönderilir. Öldürme sinyalinin aksine, süreç tarafından yorumlanabilir veya göz ardı edilebilir. Bu, sürecin kaynakları serbest bırakmayı durdurmak ve gerekirse durumu kaydetmek için "güzel" yürütme gerçekleştirmesine olanak tanır. SIGINT'in SIGTERM ile hemen hemen aynı olduğuna dikkat edilmelidir.

SIGTSTP

Kontrol terminal sürecine bir TSTP sinyali gönderilir ve geçici olarak askıya alınmasını söyler. Bu genellikle kullanıcı tarafından Control-Z'ye basılarak başlatılır. SIGSTOP'tan farklı olarak, bu işlem bir sinyal işleyiciyi kaydedebilir veya bir sinyali yok sayabilir.

SIGTTIN ve SIGTTOU

TTIN ve TTOU'da, bir işleme arka planda bir (tty) uçbiriminden sırasıyla okumaya veya yazmaya çalıştığında sinyaller gönderilir. Kural olarak, bu sinyal yalnızca çalışma paneli tarafından kontrol edilen süreçler tarafından alınabilir; arka plan programlarının kontrol terminalleri yoktur ve bu sinyali asla almamalıdırlar.

SIGUSR1 ve SIGUSR2

USR1 ve USR2 sinyalleri bir işleme gönderilir ve kullanıcı tanımlı koşulları belirtir.

SİGPOLL

POLL sinyali, eşzamansız bir G/Ç olayı meydana geldiğinde bir işleme gönderilir.

SIGSYS

SYS sinyali, bir sistem çağrısına hatalı bir bağımsız değişken ilettiğinde işleme gönderilir.

SIGTRAP

Hata ayıklayıcının bilgilendirilmesi istenen bir koşul oluştuğunda, örneğin belirli bir işlev yürütülürken veya bir değişkenin belirli bir değeri değiştiğinde, bir işleme bir TRAP sinyali gönderilir.

SİGÜRG

URG sinyali, sokette okunmak üzere acil veya aralık dışı veri bulunduğunda bir işleme gönderilir.

SIGXCPU

XCPU sinyali, CPU'yu kullanıcı tarafından ayarlanan belirli bir süreden daha uzun süre kullandığında bir işleme gönderilir. XCPU sinyalinin gelmesi, sürecin tüm ara sonuçları hızlı bir şekilde kaydetmesini ve işletim sistemi tarafından bir SIGKILL sinyali ile sonlandırılmadan önce zarif bir şekilde sonlandırılmasını sağlar.

SIGXFSZ

XFSZ sinyali, bir dosya izin verilen maksimum değerden daha büyük (belirtilen değerden daha büyük) büyüdüğünde bir işleme gönderilir.

SIGRTMIN SIGRTMAX'a

RTMIN - RTMAX sinyalleri özel kullanım içindir. Gerçek zamanlı sinyallerdir.

Çeşitli Sinyaller

Aşağıdaki sinyaller POSIX tarafından standartlaştırılmamıştır, ancak bazen bazı sistemlerde kullanılmaktadır.

SIGEMT

EMT sinyali, bir öykünücü kesintisi meydana geldiğinde işlemde gönderilir.

SIGINFO

INFO sinyali, kontrol terminalinden bir durum talebi alındığında süreçte gönderilir.

SIGPWR

PWR sinyali, sistem bir elektrik kesintisi yaşadığında süreçte gönderilir.

SIGLOST

LOST sinyali, bir "dosya kilidi" kaybolduğunda işleme gönderilir.

SIGWINCH

VİNÇ sinyali, kontrol terminali boyutunu değiştirdiğinde bir sürece gönderilir.

Klavyeden sinyal gönderme

Sinyaller klavyeden gönderilebilir. Birkaç standart varsayılan aşağıda listelenmiştir. Kesinti sinyalleri göndermek için varsayılan klavye kısayolları, stty komutu kullanılarak tanımlanabilir.

CTRL-C

SIGINT gönder (kesme). Varsayılan olarak bu, işlemin sonlandırılmasına neden olur.

CTRL-Z

SIGTSTP (Askıya Al) gönder. Varsayılan olarak bu, işlemin tüm işlemleri askıya almasına neden olur.

CTRL-\

SIGQUIT (Çık) gönder. Varsayılan olarak bu, işlemin hemen sonlandırılmasına ve çekirdeğin sıfırlanmasına neden olur.

CTRL-T

SIGINFO (INFO) gönder. Varsayılan olarak bu, işletim sisteminin komutla ilgili bilgileri görüntülemesine neden olur. Tüm sistemlerde desteklenmez.

çözüm

Uygulamalar hatalı davranıp sistemin donmasına neden olduğunda, bilgisayarınızı yeniden başlatıp oturumunuzu baştan başlatmak çok cazip gelebilir. Bu "kill" komutlarıyla, sistem çökmesine neden olan veya olabilecek uygulamaların hatalı davranışını daha iyi yönetebilirsiniz. Bununla "Unix/Linux'ta öldürme komutu" konusunu sonlandırıyorum.

Linux, programlar ve çeşitli hizmetler açısından Windows'tan daha kararlı olmasına rağmen, her şey olur ve bazen Linux sürecini sonlandırmak gerekli hale gelir. Bu, sistem hizmetini başlatma sisteminde değil, terminal aracılığıyla arka planda başlattığınızda program çöktüyse ve diğer birçok durumda, Linux sürecini sonlandırmanın daha kolay olduğu durumlarda, tüm sistemi yeniden başlatın.

Bu yazıda, bir Linux sürecini sonlandırmanın en yaygın yollarından bazılarına bakacağız. Sürecin nasıl durduğunu ve her şeyin nasıl doğru yapılacağını ayrıntılı olarak anlatacağız.

Linux işletim sistemindeki süreç kontrolü, sinyaller kullanılarak gerçekleştirilir. Herhangi bir sürecin tamamlanması dahil. Sinyaller sistem tarafından gönderilir, ancak kullanıcı tarafından özel komutlar veya hatta terminaldeki klavye kısayolları kullanılarak da gönderilebilir. Bir sürecin sona erdirilmesi için sinyal verildiğinde, bazı hazırlık çalışmaları yapması gerekir.

Alt işlemleri sonlandırmak, geçici dosyaları, soketleri vb. silmek gerekir. Ancak durumun karmaşıklığına bağlı olarak süreç tüm sinyallere yanıt vermeyebilir. Süreci sonlandırmak için kullanılan ana sinyalleri göz önünde bulundurun:

  • SIGINT- en zararsız sonlandırma sinyali, Kesinti anlamına gelir. Ctrl+C klavye kısayolu kullanılarak bir terminalden başlatılan bir işleme gönderilir. Süreç, tüm eylemlerini doğru bir şekilde tamamlar ve kontrolü geri verir;
  • SIGQUIT- bu, terminalde çalışan bir programa bir klavye kısayolu aracılığıyla gönderilen başka bir sinyaldir. Sonlandırmasını söyler ve program incelikle sinyali sonlandırabilir veya yok sayabilir. Öncekinden farklı olarak, bir bellek dökümü oluşturur. Klavye kısayolu Ctrl+/;
  • iç çekiş- İnternet bağlantısı koptuğunda esas olarak sistem tarafından gönderilen kontrol terminaline bağlantının koptuğunu sürece bildirir;
  • SIGTERM- süreci hemen sonlandırır, ancak program tarafından yönetilir, dolayısıyla alt süreçleri sonlandırmasına ve tüm kaynakları serbest bırakmasına izin verir;
  • SIGKILL- ayrıca işlemi hemen sonlandırır, ancak önceki seçeneğin aksine, işlemin kendisine aktarılmaz, çekirdek tarafından işlenir. Bu nedenle, kaynaklar ve alt süreçler çalışmaya devam eder.

Sürece zarif bir şekilde tamamlanması için bir şans vermeniz gerektiğini anlamak önemlidir. Bağlantı noktalarının ve yuvaların serbest bırakılması, kapatılması ve geçici dosyaların kaldırılması arzu edilir. Bu nedenle, asla hemen bir SIGKILL göndermeyin. Sonlandırma sinyallerini yukarıda listelenen sırayla gönderin.

Başta ctrl+c, mümkünse, o zaman SIGTERM - süreci sonlandırsa da bunu kültürel olarak ve yalnızca son çare olarak SIGKILL yapar. Şimdi pratikte pid Linux ile bir işlemin nasıl sonlandırılacağına bakalım. Her zaman SIGKILL kullanıyorsanız, aklınıza şu resim gelir:

Bir Linux süreci nasıl öldürülür?

Kill yardımcı programı, Linux'ta süreçleri işaret etmek için kullanılır. Sözdizimi çok basittir:

$ kill -pid_process sinyali

Sinyal, işlemi sonlandırmak için yukarıdaki sinyallerden biridir. Varsayılan olarak, bu parametre belirtilmezse, çok doğru olan SIGTERM sinyali kullanılır. Ayrıca hangi işlemi sonlandıracağımızı da belirtmemiz gerekiyor. Bunun için benzersiz bir işlem tanımlayıcısı kullanılır - PID.

Diyelim ki çalışan bir ping aracımız var. Öldürmekle bitirmek istiyoruz. Ardından, önce ps komutunu kullanarak kimliğini öğreniyoruz:

ps yardımcı | grep ping

İlk satır ping yardımcı programının kendisini gösterecek ve ikinci satır ps programının kendisini gösterecektir. İstenen PID'yi alıp SIGTERM kullanarak işlemi sonlandırıyoruz:

öldür -TERM 20446

Ve yalnızca bu komuttan sonra işlem askıda kalmaya devam ederse ve bunu ps çalıştırarak kontrol edebilirsiniz. Sadece şimdi SIGKILL yapabilirsiniz:

öldür -KILL 20446

Şimdi tekrar kontrol ediyoruz:

İşlem root olarak çalışıyorsa, o zaman doğal olarak sudo kullanmanız gerekir. En azından yine de bu PID'yi bulmanız gerektiğinden, bir işlemi PID'sine göre öldürmek her zaman uygun değildir. Pidi otomatik olarak işlem adından hesaplamak ve hemen sonlandırmak için birçok karmaşık yapı yapmak için xargs'ı kullanabiliriz, ancak bu gerekli değildir. Zaten özel araçlar var.

pkill ile bir süreç nasıl öldürülür

pkill yardımcı programı, öldürme için bir sarıcıdır, tam olarak aynı şekilde davranır ve aynı sözdizimine sahiptir, yalnızca işlem kimliği olarak işlemin adının iletilmesi gerekir. Yardımcı program, proc dizinini tarar ve bu ada sahip ilk işlemin PID'sini bulur, ardından ona bir SIGTERM gönderir. Böylece Linux denen bir süreci sonlandırabilirsiniz. Örneğin, aynı ping'i sonlandırmak istiyorsak:

Sinyal türünü manuel olarak da ayarlayabilirsiniz:

pkill -TERM ping

ps yerine pgrep yardımcı programını kullanarak işlemin pid'ini bulabilir, programımızın bittiğinden emin olabilirsiniz:

Ancak program sizin için birkaç işlem oluşturduysa, örneğin krom tarayıcı veya firefox sekmelerin her biri için ayrı bir işlem oluşturursa, bu yardımcı program pek yardımcı olmayacaktır. İşte bir sonraki seçenek.

killall ile bir süreç nasıl durdurulur

killall, önceki iki yardımcı programa benzer şekilde çalışır. Ayrıca işlem adını parametre olarak alır ve /proc dizininde PID'sini arar. Ancak bu yardımcı program, bu ada sahip tüm işlemleri algılayacak ve sonlandıracaktır. Örneğin:

Gördüğünüz gibi, çalışan birkaç işlem var, Linux işlemini killall ile durdurmaya devam ediyor:

Komut, çalışan tüm ping yardımcı programlarını sonlandıracaktır, bunu pgrep'i yeniden çalıştırarak doğrulayabilirsiniz:

sonuçlar

Bu yazıda, bir Linux işleminin nasıl sonlandırılacağına baktık. Bazen bu görev çok faydalı olabilir, ancak doğru yapılması gerektiğini anlamak önemlidir. Bu, SIGTERM yerine SIGKILL'i geçmenin çok tehlikeli olduğu anlamına gelmez, ancak bunu yapmamalısınız. Umarım bu bilgi size yardımcı olmuştur.

Kill komutunun -9 (veya KILL) argümanı, yalnızca kesinlikle gerekliyse POSIX uyumlu sistemlerde kullanılmalıdır. Neden? KILL sinyali işlem tarafından işlenemez. Bu, kill -9 ile bir işlemi sonlandırdıktan sonra, alt süreçlerin bellekte bırakılacağı ve öksüz kalacağı, dosya sisteminin geçici dosyalarla dolup taşacağı, paylaşılan bellek bölümlerinin etkin olacağı, soketlerin askıya alınacağı ve atexit(3 )'ün açılacağı anlamına gelir. kesinlikle idam edilmez. Sonuç olarak, beklenmedik ve hata ayıklaması zor sorunlarla karşılaşma riski vardır.

Bunun yerine varsayılan TERM sinyalini kullanın ve KILL'i yalnızca daha az sorunlu sinyallerin etkisiz olduğu kanıtlanırsa kullanın:

6738 $ öldür
$ öldür -INT 6738
$ öldür -HUP 6738
$ öldür -KILL 6738

KILL sinyali bile işlemi sonlandırmayı başaramazsa, bu, işlemin büyük olasılıkla bir G/Ç işleminde takılıp kaldığı veya başka bir sonlandırılmamış durumda olduğu anlamına gelir. Hatalı ağ sürücüsünü yeniden başlatmanız veya bağlantısını kesmeye zorlamanız gerekebilir.

Sorunlu bir uygulamayla uğraşırken kill -KILL'in varsayılan kullanımı kabul edilebilir, örneğin Netscape'in eski sürümleri genellikle yalnızca KILL sinyaliyle sona ererdi. Ancak bu, kuralın nadir bir istisnasıdır: KILL'i yalnızca bilinen uygulamalarda kullanın.

İşlemleri sonlandırırken oluşan sorunlar

Sıralı olarak farklı sinyaller göndermek aşağıdaki sorunlara neden olabilir: Birincisi, işlemin düzgün bir şekilde sona ermesi saniyeler, hatta onlarca saniye sürebilir. Kullandığım bir ürünün TERM sinyalini aldıktan sonra doğru bir şekilde tamamlanması 30 saniyeden fazla sürdü. Neyse ki, bu özellik test sırasında keşfedildi, bu nedenle bu durum için uygun bir komut dosyası yazıldı. İkincisi, bazen TERM ve KILL sinyalleri arasındaki aralıkta yeni işlemin ID'sini alırken eski işlemin sona erdiği durumlar vardır. OpenBSD gibi, yüksek işlem döngüsüne sahip sistemler ve çekirdeğin rastgele PID'ler atadığı sistemler özellikle risk altındadır. Yeni süreç aynı ebeveynin bir çatalı olabileceğinden ve aynı ada sahip olabileceğinden, işlem adını veya PPID'sini kontrol etmek her zaman yardımcı olmaz, bu nedenle özellikle paranoyak komut dosyaları, sinyali göndermeden önce işlem oluşturma zamanını veya diğer meta verileri de kontrol edebilir. Belki bu durumlar nadirdir, ancak kritik bir süreçle uğraşmanız gerekiyorsa dikkate almaya değer.

İşlem sonlandırma sinyalleri

İşlem sonlandırma sinyalleri, ad veya sıra numarası ile tanımlanabilir: kill -1 ve kill -HUP eşdeğerdir. Bununla birlikte, -1 bağımsız değişkenini yanlış yazmak, sinyali başka bir işleme veya hatta bir işlem grubuna göndermek kolay olduğundan, sinyalin adını kullanmak daha güvenlidir. Ayrıca, kodunuzu okuyacak kişiye ne tür bir sinyal gönderildiğini daha iyi anlamanıza yardımcı olacağından, adı her zaman komut dosyalarında kullanmaya çalışın.

HUP sinyali kabuğu kilitler, bu nedenle girdi beklerken askıda kalan bir kabuğu temizlemenin veya bir SSH oturumunu kapatmanın iyi bir yoludur.

İşlem sonlandırma sinyalleri hakkında daha fazla bilgi için bkz.

Her ne olursa olsun, er ya da geç, buggy veya asılı bir süreci öldürme ihtiyacı ile karşı karşıyayız. linux. Evet, Linux'taki bazı uygulamalar, kararlılıklarının kararlılığına rağmen bazen takılıyor. Bu durumlarda harika bir yardımcı programa ihtiyacınız olacak. Öldürmek. Bu yardımcı programın nasıl kullanılacağını görelim.

Her işlemdeki linux adlı kendi tanımlayıcısına sahip PID. Bir işlemi durdurmadan önce onu tanımlamanız gerekir. PID. Sonuç olarak, bu tanımlayıcıyı bulmamız gerekiyor, örneğin herhangi bir programı açın ve tanımlayıcısını bulmaya çalışın.

Asılı işlem kimliği

Aramak için komutlara ihtiyacımız var ps ve grep. Takım ps- bizim için sistemdeki aktif süreçlerin bir listesini ve bunlarla ilgili bilgileri ve komutu gösterecek grep- komutun sonuçlarını arayacak ps. Öyleyse bir terminal açalım ctrl+alt+t) ve aktif süreçlere bakın

ps aksu

Fark ettiğiniz gibi, liste çok büyük ve ihtiyacımız olan süreci bulmak için listeyi kaydırmak zaman kaybı, bunun için harika bir program kullanacağız. grep. İhtiyacımız olan işlemi bulmak için grep yazdıktan sonra aradığımız uygulamayı belirtin. Örnek olarak Viber'i kullanırsak şöyle görünür:

ps aksı | grep viber pol 22685 0,0 1,9 647748 76620 ? Sl 13:01 0:04 /usr/bin/python /usr/bin/viberwrapper-indicator pol 22697 3.0 5.4 5402084 216120 ? Sl 13:01 4:52 /opt/viber/Viber pol 24068 0,0 0,0 17192 2216 puan/0 S+ 15:41 0:00 grep --color=auto viber

İlk satırda, başlatılan viberwrapper-indicator uygulaması, bu uygulama hakkında okuyabilirsiniz. İkinci satır, bugün "söndüreceğimiz" doğrudan Viber'in kendisidir, ancak üçüncü satır nedir? Üçüncü süreç, sürecin kendisidir. grep, çünkü viber kelimesini arama parametresi olarak belirledik ve komutun çıktısında grep kendini buldu. ps.

Öğrenmenin daha kolay bir yolu daha var PID işlem bir komuttur pidof, işlemin adını bir parametre olarak alır ve PID'sini verir. Büyük/küçük harfe dikkat edin, işlem adı büyük harfle başlıyorsa ve siz küçük harfle yazarsanız (ya da tam tersi), o zaman pidof onu almaz.

pidof Viber

Fark ettiğiniz gibi, aktif Viber uygulamasıyla 3 hattım var.

Sürecin sona ermesi veya daha basit bir ifadeyle "Cinayet"

Artık Viber işlem kimliğini biliyoruz ve onu "Öldürme" fırsatımız var:

22697'yi öldür

Genel olarak, kill komutunun amacı bir işleme bir sinyal göndermektir. Varsayılan olarak, herhangi bir nitelik belirtmezsek, bir SIGTERM sinyali (sonlandırma - sonlandırma kelimesinden) gönderilir. SIGTERM, işleme son verilmesini söyler. Her sinyalin kendi numarası vardır. SIGTERM 15 numaradır. Komutun gönderebileceği tüm sinyallerin (ve numaralarının) listesi öldürmek, yürütülerek çıkarılabilir öldür -l. 22697'yi işlemek için bir SIGKILL sinyali (9 numaralı) göndermek için şunu çalıştırın:

öldür -9 22697

SIGTERM sinyali işlemi durdurmayabilir (örneğin, sinyali yakalarken veya bloke ederken), SIGKILL yakalanamadığı veya göz ardı edilemediği için her zaman süreci öldürür.
Komutu çalıştırarak özniteliklerin tam listesini görüntüleyebilirsiniz.

öldür -l