Membunuh pohon proses di atas / htop


12

htop memungkinkan saya untuk melihat pohon proses di dalam shell. Saya dapat mematikan proses dengan menekan F9 (KILL)dan kemudian memilih sinyal mana (mis. 15 SIGTERM) Yang ingin saya kirim ke pekerjaan untuk dimatikan.

Namun, ini hanya memungkinkan saya untuk membunuh satu proses pada satu waktu. Apakah ada cara untuk membunuh pohon proses penuh menggunakan htop?

Jawaban:


16

Dari man htop:

PERINTAH INTERAKTIF

Spasi Tag atau hapus centang suatu proses. Perintah yang dapat beroperasi pada banyak proses, seperti "kill", kemudian akan diterapkan pada daftar proses yang ditandai , bukan yang sedang disorot.

U Hapus centang semua proses (hapus semua tag yang ditambahkan dengan tombol Space).

F9, k proses "Bunuh": mengirim sinyal yang dipilih dalam menu, ke satu atau sekelompok proses. Jika proses diberi tag, kirim sinyal ke semua proses yang ditandai. Jika tidak ada yang ditandai, kirim ke proses yang saat ini dipilih.

Tidak cukup jawaban yang Anda cari, tetapi tutup. Anda juga dapat menghilangkan kelompok proses atau anak-anak dengan pembunuhan, lihat:

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


1

Dari halaman manual htop:

F5, t Tampilan pohon: mengatur proses berdasarkan status sebagai orang tua, dan tata letak hubungan di antara mereka sebagai pohon. Beralih tombol akan beralih di antara pohon dan tampilan sortir yang sebelumnya Anda pilih. Memilih tampilan pengurutan akan keluar dari tampilan hierarki.

Jadi tekan F5, dan Anda mungkin harus menekan 't'. Itu akan membiarkan Anda membunuh seluruh pohon.


1
Ini hanya akan berfungsi jika "pohon" tidak dapat dihindari terikat dengan induknya; perhatikan bahwa htop menunjukkan kelompok ulir sebagai pohon (dalam hal ini, rantingnya bukan proses nyata). Kalau tidak, anak-anak yatim akan diasuh oleh init, jadi jangan dibunuh.
goldilocks

Saya sangat setuju, meskipun ini sangat tergantung pada proses yang terlibat. Membunuh sesi pohon ssh akan membunuh procs anak-anak yang mendasarinya, misalnya; OP tidak terlalu spesifik tentang mengapa dia ingin membunuh seluruh pohon.
Stephan

1

Anda bisa membajak htop's sperintah. Di htop, menekan spanggilan strace -p <the-pid-of-the-selected-process>.

Maka yang bisa Anda lakukan adalah membuat straceperintah yang berisi sesuatu seperti:

#! /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

Dan letakkan di beberapa direktori seperti ~/.htop-hijack, dan panggil htop sebagai:

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

Kemudian, menekan sakan memanggil perintah itu alih-alih strace(Anda harus menekan Esc untuk kembali ke layar utama setelah itu).


1

Sudah ada fitur untuk ini sejak lama, tetapi hilang dari manual hingga 2018: tekan ctombol untuk memilih proses yang saat ini disorot serta semua anak-anaknya. Kemudian operasi yang berlaku untuk proses yang dipilih (seperti pembunuhan menggunakan kkunci) berlaku untuk proses dan anak-anaknya.

Tapi ini bukan atom. Jika anak-anak baru lahir antara saat Anda menekan cdan saat kernel telah membunuh semua proses, mereka tidak akan dibunuh dan kemungkinan besar akhirnya akan disambungkan kembali ke proses init. Ini karena htop sedang mengulang proses yang dipilih dan membunuh mereka satu per satu.

Saya telah mengusulkan tambalan untuk menambahkan fitur pembunuh kelompok atom ke atas beberapa saat yang lalu, tetapi implementasinya tidak cukup konsensual untuk digabung. Dengan itu, dimungkinkan untuk membunuh seluruh kelompok proses secara atom dari htop. Itu tidak persis sama dengan membunuh seluruh pohon, tetapi AFAIK, kernel tidak menyediakan cara untuk membunuh pohon sembarang secara atom.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.