Jawaban saya adalah variasi pada jawaban khas untuk mencari "foobar" di daftar 'ps'. Argumen "-A" "ps" lebih portabel daripada "aux", saya yakin, tetapi perubahan ini tidak relevan dengan jawabannya. Jawaban khasnya terlihat seperti ini:
$ ps -A -ww | grep [f]oobar
Sebagai gantinya saya menggunakan pola ini:
$ ps -A -ww | grep [^]]foobar
Keuntungan utama adalah bahwa lebih mudah untuk menulis skrip berdasarkan pola ini karena Anda hanya menyatukan string statis "[^]]" dengan pola apa pun yang Anda cari. Anda tidak perlu melepas huruf pertama dari string kemudian memasukkannya di antara kawat kurawal dan kemudian menyatukannya kembali. Saat menulis skrip di shell, lebih mudah untuk hanya menempelkan "[^]]" di depan pola yang sedang Anda cari. Mengiris tali di Bash adalah hal yang jelek, jadi variasi saya menghindari itu. Variasi ini mengatakan perlihatkan garis-garis di mana polanya cocok TANPA tanda kurung siku kanan]. Karena pola pencarian untuk mengecualikan braket persegi sebenarnya menambahkan braket persegi ke pola maka tidak akan pernah cocok dengan dirinya sendiri.
Jadi Anda bisa menulis perintah 'psgrep' portabel sebagai berikut. Di sini, saya membuat beberapa perbedaan antara Linux, OS X BSD, dan lainnya. Ini menambahkan tajuk kolom dari 'ps', memberikan format 'ps' lebih khusus yang sesuai dengan kebutuhan saya, dan menampilkan proses daftar ekstra, ekstra lebar sehingga tidak ada argumen baris perintah terlewatkan. Yah, sebagian besar tidak ketinggalan. Java menjadi Java, sering kali melakukan hal-hal dengan cara yang paling buruk, sehingga Anda beberapa layanan java akan berjalan melewati argumen panjang maksimum yang dibolehkan bahwa tabel proses akan melacak. Saya percaya ini adalah 1024 karakter. Panjang perintah-tunggal yang diizinkan untuk memulai suatu proses jauh lebih lama, tetapi tabel proses kernel tidak repot-repot melacak apa pun yang panjangnya lebih dari 1K. Setelah perintah dimulai, nama-perintah dan daftar argumen tidak
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
denganpgrep
(ataupgrep -f
).