Üstte / htop'ta bir süreç ağacını öldürmek


12

htop kabuktaki süreç ağaçlarını güzel görmemi sağlıyor. İşlemleri tuşuna basıp öldürmek için bir işe göndermek istediğim F9 (KILL)sinyali (örneğin 15 SIGTERM) seçerek öldürebilirim.

Ancak bu, her seferinde sadece bir işlemi öldürmeme izin veriyor. Tam bir süreç ağacı kullanarak öldürmek için bir yolu var mı htop?

Yanıtlar:


16

Gönderen man htop:

ETKİLEŞİMLİ KOMUTLAR

Boşluk Bir işlemi etiketleyin veya etiketini açın. Daha sonra, "kill" gibi birden çok işlemde çalışabilen komutlar, vurgulanan işlem yerine etiketli işlemler listesine uygulanır .

U Tüm işlemleri etiketten çıkarın (Space tuşuyla eklenen tüm etiketleri kaldırın).

F9, k "Kill" işlemi: bir menüde seçilen bir sinyali bir veya bir grup işleme gönderir. İşlemler etiketlendiyse, sinyali tüm etiketli işlemlere gönderir. Hiçbiri etiketlenmezse, seçili olan işleme gönderilir.

Aradığınız cevap tam olarak değil, yakın. Ayrıca süreç gruplarını veya öldürülen çocukları da ortadan kaldırabilirsiniz, bakınız:

/programming/392022/best-way-to-kill-all-child-processes


1

Htop man sayfasından:

F5, t Ağaç görünümü: süreçleri ebeveynliğe göre düzenler ve aralarındaki ilişkileri bir ağaç olarak düzenler. Anahtarın değiştirilmesi, ağaç ve önceden seçtiğiniz sıralama görünümü arasında geçiş yapar. Sıralama görünümü seçildiğinde ağaç görünümünden çıkılır.

Bu yüzden F5'e basın ve ardından 't' tuşuna basmanız gerekebilir. Bu tüm ağacı öldürmene izin verecek.


1
Bu sadece "ağaç" kaçınılmaz olarak ana-babaya bağlıysa çalışır; htop'un iplik gruplarını ağaç olarak gösterdiğini unutmayın (bu durumda dallar gerçek süreçler değildir). Aksi takdirde, yetim çocuklar init tarafından yeniden ebeveynlenecek, bu yüzden öldürülmeyecek.
goldilocks

Kesinlikle katılıyorum, ancak bu kesinlikle ilgili süreçlere bağlı. Bir ssh ağacı oturumunu öldürmek, altta yatan çocuk süreçlerini öldürecektir; OP neden bütün bir ağacı öldürmek istediğine dair özel değildi.
Stephan

1

Sen ele geçirebilir htop'ın skomutu. İçinde htop, tuşuna sbasar strace -p <the-pid-of-the-selected-process>.

Sonra yapabileceğiniz stracegibi bir şey içeren bir komut oluşturmaktır :

#! /bin/sh -
pids=$(ps -eo pid= -o ppid= |
  awk -v exclude="$PPID" -v pid="$2" '
    function descends(p) {
      if (p == exclude) return 0
      if (p == pid) return 1
      if (p <= 1) return 0
      return descends(parent[p])
    }
    { parent[$1]=$2 }
    END {
      for (p in parent)
        if (descends(p))
         print p
    }'
)
if [ -z "$pids" ]; then
  echo >&2 "No process found to kill"
else
  echo >&2 Killing $pids
  kill $pids
fi

Ve aşağıdaki gibi bir dizine yerleştirin ~/.htop-hijackve htop'u şu şekilde çağırın:

PATH=~/.htop-hijack:$PATH htop

Ardından, tuşuna basmak syerine bu komutu çağırır strace(daha sonra ana ekrana dönmek için Esc tuşuna basmanız gerekir).


1

Bunun için uzun zamandır bir özellik var, ancak 2018'e kadar kılavuzda eksikti: co anda vurgulanan işlemi ve tüm çocuklarını seçmek için tuşuna basın . Daha sonra, seçilen süreçler için geçerli olan işlemler ( kanahtarı kullanarak böyle bir öldürme ) süreç ve çocukları için geçerlidir.

Bu atomik değil. Bastığınız can ile çekirdeğin tüm süreçleri öldürdüğü an arasında yeni çocuklar ortaya çıkarsa , öldürülmezler ve büyük olasılıkla başlatma sürecine yeniden bağlanırlar. Bunun nedeni, htop'un seçilen işlemler üzerinde döngü oluşturması ve bunları tek tek öldürmesidir.

Ben ettik bir yama önerdi bir süre önce Htop için bir atom grubu öldürme özelliği eklemek, ancak uygulama bu birleştirilecek için rıza yeterli değildi. Bununla birlikte, tüm süreç grubunu atomik olarak htop'tan öldürmek mümkündür. Bu, bütün bir ağacı öldürmekle aynı şey değildir, ancak AFAIK, çekirdek, keyfi bir ağacı atomik olarak öldürmek için herhangi bir yol sağlamaz.

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.