Verwenden killall
.
killall -v tcpdump
Wenn Sie weitere Diagnosen wünschen, überprüfen Sie den Rückkehrcode von killall
.
Hintergrund
Ich habe einige Wurzelprozesse, die ich zu töten versuche, genauer gesagt einige tcpdump
Prozesse. Daher muss ich verwenden sudo kill
.
Mein aktueller Befehl sieht ungefähr so aus:
sudo kill $(ps aux | grep '[t]cpdump' | awk ''
Frage
Irgendwelche Ideen für die Erweiterung des Befehls (es bleibt ein Einzeiler), damit eine Ausgabe wie unten in eine Protokolldatei umgeleitet wird?
Im Erfolgsfall:
Erfolg! Getötete Prozesse: pid1 pid2 ...
Im Fehlerfall:
Error! Einige Fehlermeldung
Eine einfache Umleitung reicht nicht aus, da der Kill-Befehl nicht die Prozesse ausgibt, die er beendet hat.
Verwenden killall
.
killall -v tcpdump
Wenn Sie weitere Diagnosen wünschen, überprüfen Sie den Rückkehrcode von killall
.
Wenn killall für Sie nicht funktioniert und Sie die vollständige Befehlszeile anpassen müssen, gibt es immer pgrep -f
+ bash + logging (sogar technisch in einer Zeile gehalten ...)
Zuerst ein paar Zeilen
if tempkill1=$(pgrep -f "your_pattern") then if kill $tempkill1 then echo Success killed $tempkill1 | tee -a logfile else echo Error could not kill $tempkill1 | tee -a logfile fi else echo No processes found | tee -a logfile fi
oder anstelle von if's
tempkill1=$(pgrep -f "your_pattern") && { kill $tempkill1 && echo Success \ killed $tempkill1 | tee -a logfile || echo Error could not kill \ $tempkill1 | tee -a logfile; } || echo No processes found | tee -a logfile
Oder leiten Sie statt aller Abschläge alle Standardausgänge um:
exec > >(tee -a logfile); tempkill1=$(pgrep -f "your_pattern") && { kill $tempkill1 \ && echo Success killed $tempkill1 || echo Error could not kill $tempkill1; } || \ echo No processes found; exec > /dev/tty
Natürlich benötigen Sie ohne die Protokollierung im Wesentlichen nur eine pkill -f
sehr geringe Protokollierung des Erfolgs / Misserfolgs wie:
pkill -f "your_pattern" && echo Success|tee -a log || echo Error|tee -a log