Bagaimana cara mencari proses dengan nama tanpa menggunakan grep?

62

Dalam rangka untuk mencari proses yang dapat Anda gunakan psdengan grep.

Misalnya mencari firefox

ps aux | grep firefox

Bagaimana cara mendapatkan jawaban yang sama tanpa menggunakan grep?

Maythux
sumber
1
Saya ingin tahu mengapa Anda ingin melakukan ini, mengingat ps/grepsolusi itu bekerja dengan sangat baik?
neuronet
OP hanya menginginkan perintah yang lebih pendek. Jika ada hal seperti ps -n <process name>itu akan menjawab kebutuhannya. ps -n firefoxsedikit lebih pendek dari ps | grep firefox. pssudah bisa memfilter pidatau memproses id pengguna, jadi pertanyaan yang wajar untuk memfilter nama proses.
Jochem Schulenklopper

Jawaban:

71

The pgrepperintah, dan saudaranya pkill, ada justru untuk tujuan ini:

  • pgrep firefox akan mendaftar semua proses yang perintahnya cocok firefox
  • pgrep -f firefox akan mendaftar semua proses yang seluruh baris perintahnya cocok firefox
  • pgrep -x firefox akan mendaftar semua proses yang perintahnya sama persis firefox
  • ... dan seterusnya.

Dan tentu saja, pgrepakan mengecualikan dirinya dari pertandingan, sehingga tidak ada grepritual yang terkait dengan ps | grepyang diperlukan.


Set alat lainnya untuk ini adalah pidofdan killallperintah. Ini tidak sefleksibel pgrepdan pkill.

  • pidof firefox akan mendaftar proses yang perintahnya adalah firefox
muru
sumber
24
ps -fC process-name

contoh:

ps -fC firefox

dari man ps

  -C cmdlist      Select by command name.
                       This selects the processes whose executable name is
                       given in cmdlist.


 -f              Do full-format listing. This option can be combined
                       with many other UNIX-style options to add additional
                       columns. It also causes the command arguments to be
                       printed. When used with -L, the NLWP (number of
                       threads) and LWP (thread ID) columns will be added. See
                       the c option, the format keyword args, and the format
                       keyword comm.
Maythux
sumber
Ini adalah jawaban terbaik tetapi sayangnya tidak berfungsi pada OSX. ps -CBendera BSD berperilaku sangat berbeda - "Ubah cara persentase CPU dihitung"
mastaBlasta
2

topmemungkinkan Anda untuk mencari string ketika Anda menekan huruf besar L; proses akan disorot, dan gunakan tombol panah atas dan bawah untuk menelusuri daftar proses. Demikian pula, htopperintah memungkinkan menyoroti proses tertentu ketika Anda menekan /. Dan \akan menyaring semua proses dengan string tertentu di namanya.

Bagi yang suka awk, inilah oneliner awk: ps -eF | awk '/process-name/ {print $11}' . Dengan ps -eFnama proses selalu di kolom 11. Atau jika Anda melakukannya, ps -eF | awk '{print $11}' | sortAnda mendapatkan daftar nama proses yang diurutkan, diurutkan secara alfabet. Pipa itu menjadi lessperintah hanya untuk melihat daftar panjang file lebih mudah.

Sergiy Kolodyazhnyy
sumber
2

Trik keren

$ps -ejH

Anda akan mendapatkan semua proses dengan nama

exmple:
1747   568   568 ?        00:00:00   colord
1833  1832  1832 ?        00:00:00   gnome-keyring-d
2263   568   568 ?        00:00:00   udisksd
2311  2311  2311 ?        00:00:00   cupsd
2315  2315  2311 ?        00:00:00     dbus

Redirect atau salin output ke file dan kemudian buka nano, tekan Ctrl+ W dan Anda dapat mencari nama yang Anda inginkan.

daniel
sumber
1

Anda juga dapat menggunakan htopdan kemudian tekan F4 untuk memfilter hasil dengan string yang ditentukan pengguna yang cocok. Anda juga memiliki fitur pencarian khusus yang tersedia dengan menekan F3.

JoErNanO
sumber
1

Jika dua proses adalah masalahnya, Anda hanya dapat menggunakan grep:

grep firefox /proc/*/cmdline
pengguna1497298
sumber
0

Saya baru saja membaca ps ini alias di Lennart Poettering Blog. Outputnya sesuai dengan parenting grup kontrol systemd:

alias psc='ps xawf -eo pid,user,cgroup,args'
DDPenga
sumber