Frage Töte alle Prozesse eines Benutzers außer einigen wenigen in Linux


Ich habe einige Prozesse unter einer Bildschirmsitzung auf einem Remote-Server ausgeführt. Als ich versuchte all diese Prozesse zu töten durch:

pkill -U tim

Alle meine Prozesse werden getötet, einschließlich derer, die ich nicht töten will (d. h. die Bildschirm- und SSH-Verbindung).

Gibt es eine Möglichkeit, alle meine Prozesse außer dem Bildschirm und SSH-Verbindung zu töten?


4
2017-09-30 17:23


Ursprung




Antworten:


Irgendwie hackerisch:

ps -U tim | egrep -v "ssh|screen" | cut -b11-15 | xargs -t kill

Dies wird alles außer ssh oder Bildschirm Prozesse töten. Hier sind die Befehle erklärt:

  • ps -U tim - wird natürlich jeden Prozess vom Benutzer tim auflisten
  • egrep -v "ssh|screen" - entfernt Zeilen mit ssh- oder screen-Prozessen
  • cut -b11-15 - schneidet die Daten in den Spalten 11-15 (in der Regel befindet sich dort die PID)
  • xargs -t kill - Übergibt alle Prozess-IDs an den Befehl kill

Sie können auch awk verwenden, wenn Sie daran gewöhnt sind.

ps -U tim | egrep -v "ssh|screen" | awk '{print $2}' | xargs -t kill

10
2017-09-30 18:39





Nichts eingebaut in das ich mir bewusst bin. Sie könnten ein Skript wie folgt erstellen:

#!/bin/bash
ps ux | sed -e '/bash/d' -e '/screen/d' | awk '{print $2}' | while read process
do 
  kill $process
done

Wenn es andere Prozesse gäbe, die Sie vermeiden wollten, müssten Sie einfach mehr hinzufügen

-e '/processname/d'

Einträge in den Sed-Teil. Es gibt wahrscheinlich einen saubereren Weg, um damit umzugehen, aber das wird funktionieren.


1
2017-09-30 18:36





Wenn du all deine Procs viel tötest, solltest du das vielleicht untersuchen Warum du musst das tun ... aber hey, es geht nur darum, Dinge zu tun, nicht über nicht Sachen machen.

Eine einfache Lösung wäre die Verwendung von zwei Benutzer-IDs ... eine für den Bildschirm und Ihre SSH-Verbindung, und die andere für alle Prozesse, die Sie irgendwann beenden möchten.

Dies ist jenseits von "Hacker" und in einfach "Hack", aber es hat einen zusätzlichen Vorteil, dass alle anderen Programme, die Sie als "Connect" Benutzer laufen lassen, nicht getötet werden, wenn Sie die anderen Procs beenden. Dies könnte "Schwänze" von Fehlerprotokollen und Dinge wie die, die Sie vielleicht übrig haben möchten, enthalten.

Hoffe das hilft!


1
2017-09-30 18:48



Sie meinen, zwei Benutzer-IDs für den Remote-Server zu haben? Nur neugierig, kann ich einen anderen für mich selbst erstellen, ohne auf root wechseln zu können? - Tim


Versuchen:

ps aux | grep ^$LOGNAME | egrep -v 'ps aux|-bash|sshd' | awk '{ print $2 }' | xargs kill -9; ps aux | grep $LOGNAME

1
2017-09-22 14:44





Ich habe den Ansatz von @RoyRico benutzt - kann diesen Beitrag nicht kommentieren, weil mir der Ruf fehlt - und habe ihn an mein System angepasst. Wegen einer anderen Konfiguration funktionierte man nicht von der Stange.

ps -U myUserName | egrep -v "ssh|screen|grep|bash|systemd|(sd-pam)|ps" | awk '{print $1}' | tail -n +2 | xargs -t kill

Nun, ich habe mehr Prozesse ausgeschlossen, die ich nicht hätte töten wollen. Zweitens, die PIDs kamen in der ersten Spalte, also war der ehemalige 'Schnitt'-Befehl völlig falsch positioniert (als Hacker-Lösung etwas völlig Normales und Akzeptables;)). Drittens hatte ich während des Grepings eine "PID" als Headline, die ich mit Tail ausschloss.


0
2017-09-09 13:29