Cara mendapatkan pgrep untuk menampilkan info proses penuh

26

Apakah ada cara untuk pgrepmemberi saya semua info tentang setiap proses yang psdilakukan? Saya tahu saya dapat menyalurkan psmelalui greptapi itu banyak mengetik dan itu juga memberi saya grepproses itu sendiri yang tidak saya inginkan.

JoelFan
sumber

Jawaban:

22

pgrepOpsi output sangat terbatas. Anda hampir pasti perlu mengirimkannya kembali psuntuk 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>
Dan Carley
sumber
2
Terima kasih! Saya memodifikasinya menjadi: function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } Jika tidak, jika tidak ada proses yang cocok dengan pencarian Anda, itu akan membuang seluruh psmegilla penggunaan.
JoelFan
Pada OS X, psperlu tanda hubung untuk bendera:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
Erik Nomitch
1
Jika Anda ingin menghindari halaman penggunaan ps, GNU xargs memiliki opsi, -ryang hanya akan menjalankan perintah jika telah menerima daftar.
Doug
1
Cara yang lebih ringkas adalahps fp $(pgrep -d, "$@")
Igor Mikushkin
14

Kombinasikan pgrepdengan psmenggunakan 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. grepselalu mencoret nama kolom.

nekat
sumber
luar biasa! ini menyelesaikan masalah aneh dengan skrip startup server arcgis untuk xfvb
prusswan
Ini harus menjadi jawaban yang diterima, karena menggunakan pipa unix dengan cara yang tepat, mengambil daftar PID dari satu alat dan mengumpan balik ke alat lain (jika sepertinya seperti peretasan, bukan - teknik ini dapat digunakan dalam BANYAK alat UNIX , seperti alat bantu grep email. Fungsi Bash ppgrep () adalah ketergantungan yang tidak perlu, dan menghindari kesempatan belajar yang disajikan di sini.)
Scott Prive
10

Berikut ini hanya memberi Anda PID + baris perintah penuh. Untuk "semua info yang psada", 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 ), -lopsi menampilkan info tetapi perilakunya bervariasi:

  • pgrep -fl cocok dengan pola terhadap baris perintah penuh dan menunjukkan baris perintah penuh.
  • pgrep -lsendiri hanya cocok dengan nama yang dapat dieksekusi dan hanya menunjukkan nama yang dapat dieksekusi.
    Jika Anda tidak menginginkan kecocokan penuh, Anda tidak dapat melihat baris perintah lengkap :-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]

Tidak yakin kode apa * BSD gunakan tetapi halaman manual mereka mendokumentasikan -flperilaku lama .

Sayangnya Anda bahkan tidak dapat menggunakan -flportable - dalam procps-ng baru-baru ini, -f( --list-name) selalu hanya mencetak nama yang dapat dieksekusi.

Beni Cherniavsky-Paskin
sumber
4

Linux

Untuk versi GNU dari pgrepyang -i(kasus-ketidakpekaan) tidak didukung, dan panjang + keluaran fuzzy dicapai dengan -af.

$ pgrep -af apache

OUTPUT:
    1748 /usr/sbin/apache2 -k start

Halaman manual :

   -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.

MacOS

Pada OSX (dan berdasarkan inferensi, pada BSD) -l( output panjang ) dalam kombinasi dengan -f( cocok dengan daftar argumen lengkap ) akan menampilkan perintah lengkap ( -imenambahkan 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.
ccpizza
sumber
1

Gunakan opsi -v untuk grep - ia mengembalikan semuanya TETAPI pola yang diminta.

ps -ef | grep <process> | grep -v grep
Baumgart
sumber
Ini jawaban terbaik untukku. Ini menunjukkan kepada Anda perintah penuh tanpa terpotong seperti yang terjadi denganpgrep -u user | xargs ps -f -p
BringBackCommodore64
0

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 grepuntuk mengecualikan proses grep.

Kyle Brandt
sumber
0

Untuk menghilangkan grepproses tersebut, Anda dapat menggunakan tanda kurung sebagai bagian dari pola Anda:

ps -ef | grep '[t]ty'

Anda dapat melakukan ini dengan psdan pgrep:

ps -fp $(pgrep -d, tty)
Dijeda sampai pemberitahuan lebih lanjut.
sumber
-1

Saya kira ini akan membantu Anda:

ps auxww

Blagoy Genadiev
sumber
2
Tolong jelaskan. Info lebih lanjut akan meningkatkan jawaban ini
Dave M