La mia risposta è una variazione della risposta tipica per la ricerca di "foobar" in un ps
elenco. L'argomento di "-A" "ps"
è più portatile di "aux"
, credo, ma questo cambiamento è irrilevante per la risposta. La risposta tipica è questa:
$ ps -A -ww | grep [f]oobar
Invece uso questo modello:
$ ps -A -ww | grep [^]]foobar
Il vantaggio principale è che è più semplice scrivere script basati su questi schemi perché concateni semplicemente una stringa statica [^]]
con qualunque modello tu stia cercando. Non è necessario rimuovere la prima lettera della stringa, quindi inserirla tra le parentesi quadre e quindi concatenarla nuovamente insieme. Quando [^]]
si esegue lo scripting in shell è più semplice restare semplicemente davanti allo schema che stavi cercando per cercare. Il taglio delle corde in Bash è una cosa brutta, quindi la mia variazione lo evita. Questa variazione dice mostra le linee in cui il modello corrisponde SENZA una parentesi quadra di destra]. Poiché il modello di ricerca per escludere una parentesi quadra aggiunge effettivamente la parentesi quadra al modello, allora non corrisponderà mai a se stesso.
Quindi potresti scrivere un psgrep
comando portatile come segue. Qui, tengo conto delle differenze tra Linux, OS X BSD e altri. Questo aggiunge le intestazioni di colonna da ps
, fornisce una più personalizzataps
il formato adatto alle mie esigenze migliori e visualizza i processi che elencano extra, extra in modo che nessuno degli argomenti della riga di comando venga perso. Bene, molti non sono mancati. Essendo Java, spesso fa le cose nel modo peggiore possibile, quindi alcuni servizi Java correranno oltre la lunghezza massima consentita degli argomenti che la tabella dei processi terrà traccia. Credo che questo sia 1024 caratteri. La lunghezza della sola riga di comando consentita per avviare un processo è molto più lunga, ma la tabella dei processi del kernel non si preoccupa di tenere traccia di qualsiasi lunghezza superiore a 1 KB. Una volta avviato il comando, l'elenco dei nomi dei comandi e degli argomenti non è necessario, quindi ciò che viene memorizzato nella tabella dei processi è solo informativo.
psgrep ()
{
pattern=[^]]${1};
case "$(uname -s)" in
Darwin)
ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
Linux)
ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
*) # other UNIX flavors get a minimalist version.
ps -A -ww | grep -i -e ${pattern}
;;
esac
}
grep --colour
.