-9 programı öldür ama yine de devam ediyorlar


11

Tüm arka plan işlerimi daha önce KUbuntu altında göndermeyi denedim

kill -9 $(jobs -p)

Bu komut hemen mesajı şöyle vermesine rağmen

[1] Öldürülen myjob1

[2] Öldürülen myjob2

İşlemlerinin hala üstte asılı olduğunu görebiliyorum ve CPU ve bellek kullanımları çalışma süresinin çıkışında değişmiyor ve ücretsiz.

Bu yüzden sanırım onları düzgün öldürmemiş olmalıyım. Birisi bana neler olduğunu ve ne yapmam gerektiğini açıklayabilir mi?

Üstte, eğer k tipi ve PID'yi girersem süreçleri tek tek öldürebileceğimi buldum. Peki bu kill komutundan farklı mı?

Ayrıca çevrimiçi bir yerde buldum http://www.ruhr.de/home/smallo/award.html -9 öldürmeyi tavsiye etmeme hakkında

Yararsız Öldürme -9 form mektubu

(Alıntı iğrenme)

Hayır hayır hayır. Kill -9 kullanmayın.

Sürece temiz bir şekilde bir şans vermez:

1) Soket bağlantılarını kapatın

2) Temp dosyalarını temizleyin

3) çocuklarını gideceğini bildir

4) terminal özelliklerini sıfırlayın

ve benzerleri vb.

Genel olarak, 15 gönderin ve bir iki saniye bekleyin ve bu işe yaramazsa, 2 gönderin ve eğer işe yaramazsa 1 gönderin. Bu işe yaramazsa, program kötü davrandığından İKİLİ'Yİ ÇIKARIN!

Kill -9 kullanmayın. Sadece saksıyı toplamak için biçerdöver çıkarmayın.

Bu doğru mu? "15 gönder", "2 gönder" ve "1 gönder" ne anlama gelir? Kendileri mi komut veriyorlar yoksa "-15 PID öldür", "-2 PID öldür" ve "-1 PID öldür" mü?

Teşekkürler ve saygılar!


İkili (yürütülebilir dosya) kaldırılması kendi başına işlemi öldürmez. Dosya sistemi, işlemin bu dosyayı kullandığını bilir ve işlemin dosyayı kaldırdıktan sonra bile "görmesini" sağlar.
Jeppe Stig Nielsen

Yanıtlar:


9

İşleminiz büyük olasılıkla öldü ancak işlem tablosu girdisinde görünmeye devam ediyor, çünkü bu bir "zombi işlemi". Bir alt süreç sona erdiğinde ve tamamen kaybolduğunda (işlem tablosu girişi hariç) ve ebeveyn sonlandırma durumunu (bekleme işlevlerinden herhangi biri aracılığıyla) alamazsa, buna zombi denir ... Bir zombi alışkanlığı öldürme (sinyal aracılığıyla) çünkü zaten sonlandırıldı. Yapmanız gereken ebeveyn sürecini bulmak ve bir temiz öldürmek, böylece kill kullanmamak - 9

İşte bir zombi öldürmek için iki basit adım ...

  1. Ebeveyn hala hayatta ise, onu öldürmeye çalışın (veya SIGHUP ihtiyacınız olan tek şey)
  2. 1 numara başarısız olursa, çekirdeğinde bir hata var ... yeniden başlatma arkadaşın ve bu hatayı düzelt: ->

İşlerimi komut satırında ve arka planda gönderiyorum, ebeveynleri ne olurdu? Ve eğer varsa ebeveynlerini nasıl bulabilirim?
Tim

-fÜst işlemleri görmek için ps işaretini kullanın .
Jack

6

man killmevcut çeşitli sinyallerin tanımı için bkz . evet.

Bunlar, kullanıcının işlemle "tamamlandığını" bildirir, ancak biraz farklı nedenleri belirtirler. "yapıyorsunuz ve çıkıyorsunuz", SIGHUP sadece kimsenin dinlemediği anlamına gelir (bir sunucu işlemi konsol çıkışını kesip çalışmaya devam ederek SIGHUP'a meşru bir şekilde tepki verebilir).

  • 9 SIGKILL'dir ve sürecin dahili olarak yakalayamadığı ve işleyemediği tek kişi olması özeldir. Basitçe, çekirdeği asla kontrol sürecini geri döndürmez ve böylece temizleme şansı vermez.

üstte, k tipi ve PID girilirse, süreçleri tek tek öldürebilirim. Öyleyse bu kill komutu için bazı seçeneklerle eşdeğer mi?
Tim

Evet, top sadece sürece bir sinyal gönderir, öldürme işleminin yaptığı gibi. AFAICT, üstte kullanılan varsayılan sinyal 15'tir (SIGTERM).
puetzk


1

"Kill -9" yazmak yerine "kill -1" veya "kill -15" yazın. Öldür -9, herhangi bir işlemin başında sert bir mermidir, hafızanın sızmasına neden olabilecek kirli bir durumda onu öldürür, falan filan.

Kill -9 yazıyorsanız ve çalışmıyorsa, sürecin yeniden doğmadığından ve bu işlemi öldürme izniniz olduğundan emin olmak isterim.


Sürecin yeniden doğmadığından emin olmak için nasıl görünüyorsunuz? Süreçlere sahip olduğum için, bu süreci öldürme iznim var mı?
Tim

Varsa, farklı bir işlem numarasına sahip olmalıdır. Eğer ps -Al yaparsanız ve processA görürseniz, o zaman -9 processA öldürürsünüz ve ps -Al yaparsınız ve işlem kuyruğunda STILL bir processA varsa, bunun SAME processA olduğundan ve yeni bir tane olmadığından emin olun.
Satanicpuppy

Ve size süreci öldürme izniniz yoksa söyleyecektir.
Satanicpuppy

0

Sinyal 9 SIGKILL'dir. Bir SIGKILL göndermek, işletim sisteminden süreci derhal öldürmesini istiyor, soru sorulmuyor. İşlem önceden bildirilmez ve kendi kendini temizleme şansı yoktur.

Sinyal 15 SIGTERM'dir. Bir SIGTERM göndermek, işletim sisteminden işlemden kendini kapatmasını istemesini ister.

İşletim sistemi sürecin IO yaptığını düşünüyorsa veya bir Zombi (Ebeveyni bundan sonra temizlemeyen bir alt süreç) ise SIGKILL yok sayılabilir.

SIGTERM uygulama tarafından yok sayılabilir, ancak işletim sistemleri kapatma sırasında SIGTERM gönderdikten sonra bir program hala çalışıyorsa kısa bir süre SIGKILL tarafından gönderildiği için uygulamaların bunu yapması önerilmez.

Not: Komut satırı killher zaman işletim sisteminden, uygulamaya kimin işlemin sahibi, vb.'ye bağlı olarak yapabilecekleri veya yapamayacakları bir sinyal göndermesini ister.

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.