Jawaban:
pgrep
Opsi output sangat terbatas. Anda hampir pasti perlu mengirimkannya kembali ps
untuk mendapatkan informasi penting. Anda dapat mengotomatisasi ini dengan menggunakan fungsi bash di ~/.bashrc
.
function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }
Kemudian panggil perintah dengan.
ppgrep <pattern>
ps
perlu tanda hubung untuk bendera:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
yang hanya akan menjalankan perintah jika telah menerima daftar.
ps fp $(pgrep -d, "$@")
Kombinasikan pgrep
dengan ps
menggunakan xargs
!
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
Misalnya coba
pgrep -u user | xargs ps -f -p
untuk mendapatkan daftar proses lengkap user
.
Sangat menyenangkan bahwa Anda menjaga baris pertama dengan nama kolom. grep
selalu mencoret nama kolom.
Berikut ini hanya memberi Anda PID + baris perintah penuh. Untuk "semua info yang ps
ada", lihat jawaban lain ...
Sebagian besar linux menggunakan procps-ng . Sejak 3.3.4 (dirilis pada 2012), pgrep -a
( --list-full
) menunjukkan baris perintah penuh.
Catatan: Secara default pgrep hanya cocok dengan pola yang Anda berikan terhadap nama yang dapat dieksekusi. Jika Anda ingin mencocokkan dengan baris perintah penuh (seperti yang dilakukan ps), tambahkan opsi -f
( --full
).
Dalam versi yang lebih lama (termasuk proyek proksi asli ), -l
opsi menampilkan info tetapi perilakunya bervariasi:
pgrep -fl
cocok dengan pola terhadap baris perintah penuh dan menunjukkan baris perintah penuh.pgrep -l
sendiri hanya cocok dengan nama yang dapat dieksekusi dan hanya menunjukkan nama yang dapat dieksekusi. Tidak yakin kode apa * BSD gunakan tetapi halaman manual mereka mendokumentasikan -fl
perilaku lama .
Sayangnya Anda bahkan tidak dapat menggunakan -fl
portable - dalam procps-ng baru-baru ini, -f
( --list-name
) selalu hanya mencetak nama yang dapat dieksekusi.
Untuk versi GNU dari pgrep
yang -i
(kasus-ketidakpekaan) tidak didukung, dan panjang + keluaran fuzzy dicapai dengan -af
.
$ pgrep -af apache
OUTPUT:
1748 /usr/sbin/apache2 -k start
-a, --list-full
List the full command line as well as the process ID. (pgrep only.)
-f, --full
The pattern is normally only matched against the process name.
When -f is set, the full command line is used.
Pada OSX (dan berdasarkan inferensi, pada BSD) -l
( output panjang ) dalam kombinasi dengan -f
( cocok dengan daftar argumen lengkap ) akan menampilkan perintah lengkap ( -i
menambahkan case-insensitivity):
$ pgrep -fil ssh
OUTPUT:
33770 ssh: abc@192.168.0.123-22 [mux] t
The man page :
-l Long output. For pgrep, print the
process name in addition to the
process ID for each matching
process. If used in conjunction
with -f, print the process ID and
the full argument list for each
matching process. For pkill, dis-
play the kill command used for
each process killed.
Gunakan opsi -v untuk grep - ia mengembalikan semuanya TETAPI pola yang diminta.
ps -ef | grep <process> | grep -v grep
pgrep -u user | xargs ps -f -p
Saya rasa tidak ada, informasi paling banyak yang bisa Anda dapatkan adalah nama dan id proses dengan menggunakan opsi -l untuk pgrep.
ps mendukung semua jenis opsi pemformatan, jadi saya hanya akan membuat alias untuk apa Anda ingin menyimpan pengetikan. Cara sederhana untuk mengecualikan proses grep dari output kami untuk menyertakan pipa tambahan grep -v grep
untuk mengecualikan proses grep.
Untuk menghilangkan grep
proses tersebut, Anda dapat menggunakan tanda kurung sebagai bagian dari pola Anda:
ps -ef | grep '[t]ty'
Anda dapat melakukan ini dengan ps
dan pgrep
:
ps -fp $(pgrep -d, tty)
Saya kira ini akan membantu Anda:
ps auxww
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }
Jika tidak, jika tidak ada proses yang cocok dengan pencarian Anda, itu akan membuang seluruhps
megilla penggunaan.