Bash script per trovare e terminare un processo con determinati argomenti?


17

Voglio uno script che uccida le istanze di sshcui viene eseguito con l'argomento -D (impostazione di un proxy locale).

Manualmente, ps -A | grep -i sshcerco le istanze con -D e kill -9 {id}ognuna.

Ma come appare in forma di script bash?

(Sono su Mac OS X ma installerò tutti i comandi necessari tramite port)


Vedi le alternative pgrep e pkill su mac os x? . pgrepe pkillsono comandi per trovare o eliminare in modo affidabile i processi per nome in Solaris e Linux.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


26

Esegui pgrep -f "ssh.*-D"e verifica se restituisce l'ID processo corretto. Se lo fa, è sufficiente modificare pgrepper pkille mantenere le stesse opzioni e modello

Inoltre, non dovresti usare kill -9aka SIGKILL a meno che non sia assolutamente necessario perché i programmi non possono intrappolare SIGKILL per ripulire dopo se stessi prima di uscire. Uso solo kill -9dopo aver provato -1 -2e -3.


dovresti ridefinire l'uccisione come un forciclo che fa kill -iper ciascuno i;)
Seamus,

1
pgrepnon è nativo su OSX, devi ottenerlo da una terza parte. Il thread precedente sull'argomento presenta proposte e alternative.
Gilles 'SO- smetti di essere malvagio' il

uomo vivo, più uso 'nix, più mi piace :) grazie per questo!
javamonkey79,

pgrep e pkill sono disponibili in OS X 10.8 (Mountain Lion) e versioni successive. apple.blogoverflow.com/2012/07/…
Peter Hanley

Potrebbe essere utile aggiungere il -aflag a pgrepcui lo stampa non solo l'id del processo ma anche il comando (inclusi gli argomenti). In questo modo è molto facile verificare che siano abbinati solo i processi desiderati.
Luator,


0

È possibile sfruttare il file system proc per raccogliere le informazioni. Per esempio:

for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done

Non è perfetto, vorrai una regex più esclusiva (specialmente se stai uccidendo i processi) ma echo $proc | awk -F'/' '{ print $3 }'ti mostrerà il PID dei processi.


1
OSX non ha /proc. E c'è già uno strumento affidabile per farlo, chiamato pgrep(disponibile nativamente almeno su Solaris e Linux).
Gilles 'SO- smetti di essere malvagio' il
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.