Cevabım, 'ps' listesindeki "foobar" kelimesini aramak için verilen tipik cevabın bir çeşididir. "-A" "ps" argümanı "aux" dan daha taşınabilir, inanıyorum, ancak bu değişiklik cevapla alakasız. Tipik cevap şöyle görünür:
$ ps -A -ww | grep [f]oobar
Bunun yerine bu deseni kullanıyorum:
$ ps -A -ww | grep [^]]foobar
Asıl avantajı, bu kalıplara dayanarak komut dosyaları yazmanın daha kolay olmasıdır, çünkü statik bir dizgeyi "[^]]" aradığınız desenle birleştirirsiniz. Dizenin ilk harfini çıkarmanız, sonra köşeli parantezin arasına yerleştirmeniz ve sonra tekrar bir araya getirmeniz gerekmez. Kabuk içinde komut dosyası yazarken, aradığınız kalıbın önüne "[^]]" yapıştırmanız daha kolaydır. Bash'de dize dilimleme çirkin bir şeydir, bu yüzden varyasyonum bundan kaçınır. Bu varyasyonda, desenin lider bir sağ köşeli ayraç OLMADIĞINDAN desenle eşleştiği satırlar gösteriliyor. Köşeli parantezi hariç tutacak olan arama deseni aslında köşeli parantezi desene eklerse, o zaman hiçbir zaman kendi kendine eşleşmez.
Böylece taşınabilir bir 'psgrep' komutu aşağıdaki gibi yazabilirsiniz. Burada, Linux, OS X BSD ve diğerleri arasındaki farklar için bir miktar izin veriyorum. Bu, 'ps' sütun başlıklarını ekler, gereksinimlerime göre daha özel bir 'ps' formatı sağlar ve komut satırı argümanlarının hiçbirinin kaçırılmaması için ekstra geniş ve fazla geniş listeleme işlemlerini görüntüler. Pek çoğu kaçırılmamış. Java, Java olduğundan, genellikle işleri en kötü şekilde yapar, bu nedenle bazı java servisleri, işlem tablosunun izleyeceği izin verilen maksimum bağımsız değişkenler uzunluğunu aşar. Bunun 1024 karakter olduğuna inanıyorum. Bir işlemi başlatmak için izin verilen komut uzunluğu çok daha uzun, ancak çekirdek işlem tablosu 1K'dan daha uzun olan herhangi bir şeyin izini sürmekle uğraşmıyor. Komut başlatıldıktan sonra komut adı ve argüman listesi
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
}
ps aux |grep
,pgrep
(veyapgrep -f
) ile değiştirebilirsiniz .