Uccidere un albero di processi in alto / in alto


12

htop mi permette di vedere piacevolmente alberi di processi all'interno della shell. Posso interrompere i processi premendo F9 (KILL)e selezionando quindi quale segnale (ad es. 15 SIGTERM) Voglio inviare a un lavoro da uccidere.

Tuttavia, questo mi permette di uccidere solo un processo alla volta. C'è un modo per uccidere un intero albero di processi usando htop?

Risposte:


16

Da man htop:

COMANDI INTERATTIVI

Spazio Tagga o deseleziona un processo. I comandi che possono operare su più processi, come "kill", verranno quindi applicati all'elenco dei processi con tag , anziché a quello attualmente evidenziato.

U Deseleziona tutti i processi (rimuovi tutti i tag aggiunti con il tasto Spazio).

F9, k Processo "Kill": invia un segnale che è selezionato in un menu, a uno o un gruppo di processi. Se i processi sono stati taggati, invia il segnale a tutti i processi taggati. Se nessuno è taggato, invia al processo attualmente selezionato.

Non proprio la risposta che stavi cercando, ma vicino. Puoi anche eliminare gruppi di processi o bambini con kill, vedi:

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


1

Dalla manpage htop:

F5, t Vista ad albero: organizza i processi per genitorialità e organizza le relazioni tra loro come un albero. Se si attiva la chiave, si passa dalla struttura ad albero alla vista di ordinamento precedentemente selezionata. Selezionando una vista di ordinamento si esce dalla vista ad albero.

Quindi premi F5 e potresti dover premere 't'. Questo ti permetterà di uccidere l'intero albero.


1
Funzionerà solo se "l'albero" è inevitabilmente legato al suo genitore; si noti che htop mostra i gruppi di thread come alberi (nel qual caso i rami non sono processi reali). Altrimenti, i bambini orfani verranno riconsegnati da init, quindi non uccisi.
Riccioli d'oro,

Sono assolutamente d'accordo, anche se ciò dipende strettamente dai processi coinvolti. Uccidere una sessione dell'albero ssh ucciderà ad esempio i proc dei bambini sottostanti; l'OP non era particolarmente preciso sul perché voleva uccidere un intero albero.
Stephan,

1

Potresti dirottare htopil scomando. In htop, premendo sinvoca strace -p <the-pid-of-the-selected-process>.

Quindi quello che potresti fare è creare un stracecomando che contiene qualcosa di simile:

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

E posizionalo in una directory come ~/.htop-hijack, e chiama htop come:

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

Quindi, premendo ssi invocherebbe quel comando invece di strace(è necessario premere Esc per tornare alla schermata principale in seguito).


1

C'è stata una caratteristica per questo da molto tempo, ma mancava dal manuale fino al 2018: premere il ctasto per selezionare il processo attualmente evidenziato e tutti i suoi figli. Quindi le operazioni che si applicano ai processi selezionati (come uccidere usando la kchiave) si applicano al processo e ai suoi figli.

Questo non è atomico, però. Se vengono generati nuovi bambini tra il momento in cui si preme ce il momento in cui il kernel ha ucciso tutti i processi, non verranno uccisi e molto probabilmente finiranno per essere ricollegati al processo di init. Questo perché htop esegue il loop dei processi selezionati e li uccide uno per uno.

Ho proposto una patch per aggiungere una caratteristica di uccisione di gruppi atomici su htop qualche tempo fa, ma l'implementazione non era abbastanza consensuale da poter essere unita. Con esso, è possibile uccidere atomicamente un intero gruppo di processi da htop. Non è esattamente lo stesso che uccidere un intero albero, ma AFAIK, il kernel non fornisce alcun modo per uccidere atomicamente un albero arbitrario.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.