Perintah pgrep: mencari PID berdasarkan nama, opsi -f, dan perbedaan pidof dan pkill

Lingkungan ujiKeluarga RHELAlmaLinux 9.8procps-ng 3.3akun rootDebian 12 · procps-ng 4.0.2 akun biasa
Perintah Proses · Penjadwalan Tugaspgrep, pidofLokasi/usr/bin/pgrep

Untuk mencari nomor (PID) proses yang sedang berjalan berdasarkan nama, akun, atau baris perintahnya, gunakan perintah pgrep. Di server AlmaLinux 9, kami menyalin program sleep dengan nama lain, menjalankan tiga proses, lalu membandingkan proses yang ditemukan setiap opsi. Saat mencari berdasarkan nama, hanya tiga proses itu yang muncul, sedangkan saat mencari di seluruh baris perintah dengan -f, timeout yang menjalankannya juga ikut muncul.

Keluaran di bawah adalah hasil menjalankan perintah dengan akun root di server AlmaLinux 9.8 dan akun biasa di server Debian 12. Proses yang dicari adalah salinan sleep bernama pgdemo-a dan pgdemo-b yang dijalankan dengan timeout 300 agar berhenti sendiri setelah 5 menit. Nomor proses (PID) dan nama akun Debian (user1) diganti dengan nilai contoh, dan versi procps-ng di server AlmaLinux hanya ditulis sampai versi mayor dan minor.

1️⃣ Cara dasar menggunakan perintah pgrep

  • ↪️ Mencari PID berdasarkan nama dan kode keluar

Jika Anda menulis sebagian nama setelah pgrep, perintah ini mencetak nomor proses yang namanya mengandung karakter itu, satu per baris. Pencarian pgdemo menghasilkan tiga nomor: dua pgdemo-a dan satu pgdemo-b.

pgrep pgdemo
2143
2152
2155

Saat nama ditulis sampai pgdemo-a, hanya dua pgdemo-a yang tersisa.

pgrep pgdemo-a
2143
2152

Teks yang dicari dibaca sebagai ekspresi reguler yang diperluas, dan tanpa opsi pgrep hanya mencari di nama proses.

Jika tidak ada proses yang cocok, pgrep selesai tanpa mencetak apa pun, jadi hasilnya diperiksa dengan kode keluar. Setelah mencari nama yang tidak ada, pgdemo-zz, menjalankan [echo $?] menghasilkan 1.

pgrep pgdemo-zz
echo $?
1

Saat dijalankan tanpa kondisi apa pun, muncul galat di bawah bersama kode keluar 2. Halaman man menjelaskan kode keluar sebagai 0 (ditemukan), 1 (tidak ditemukan), 2 (galat sintaks baris perintah), dan 3 (galat fatal seperti kehabisan memori).

pgrep
pgrep: no matching criteria specified
Try `pgrep --help' for more information.
echo $?
2

Jika kode keluar ini dipakai sebagai kondisi alih-alih keluarannya, skrip dapat memeriksa apakah suatu proses sedang berjalan. Versinya diperiksa dengan [pgrep -V]. Server Debian 12 memakai procps-ng 4.0.2, dan server AlmaLinux 9.8 memakai procps-ng 3.3.

pgrep -V
pgrep from procps-ng 4.0.2

2️⃣ Opsi pgrep -f dan keluaran -l, -a

  • ↪️ Proses yang ikut muncul saat mencari di seluruh baris perintah

Dari nomornya saja tidak terlihat proses apa itu, jadi cetak juga namanya dengan -l atau seluruh baris perintahnya dengan -a.

pgrep -l pgdemo
2143 pgdemo-a
2152 pgdemo-a
2155 pgdemo-b
pgrep -a pgdemo
2143 ./pgdemo-a 300
2152 ./pgdemo-a 301
2155 ./pgdemo-b 300

Angka 300 dan 301 di akhir keluaran -a adalah argumen dalam detik yang diberikan ke sleep. Dengan argumen ini kami membedakan dua pgdemo-a yang namanya sama.

Dengan -f, pgrep mencari di seluruh baris perintah, bukan di nama. Saat pgdemo-a dicari dengan -f, nomornya bertambah dari dua menjadi empat.

pgrep -f pgdemo-a
2141
2143
2150
2152

Setelah -a ikut ditambahkan, terlihat bahwa dua baris tambahan itu adalah timeout yang menerima pgdemo-a sebagai argumen. Namanya timeout, tetapi baris perintahnya mengandung pgdemo-a sehingga cocok dengan kondisi -f.

pgrep -af pgdemo-a
2141 timeout 300 ./pgdemo-a 300
2143 ./pgdemo-a 300
2150 timeout 300 ./pgdemo-a 301
2152 ./pgdemo-a 301

Saat memakai -f di dalam skrip, periksa apakah skrip itu sendiri ikut muncul di hasil. pgrep tidak pernah memasukkan dirinya sendiri ke hasil, tetapi jika baris perintah skrip yang menjalankan pgrep mengandung teks yang dicari, skrip itu juga muncul.

Saat pgdemo-a dicari dengan chk.sh, skrip yang meneruskan teks yang diterimanya apa adanya ke [pgrep -af], di baris terakhir bertambah skrip itu sendiri: bash chk.sh pgdemo-a.

bash chk.sh pgdemo-a
2141 timeout 300 ./pgdemo-a 300
2143 ./pgdemo-a 300
2150 timeout 300 ./pgdemo-a 301
2152 ./pgdemo-a 301
2160 bash chk.sh pgdemo-a

Pola [p]gdemo-a, yang mengurung huruf pertama dalam kurung siku, sebagai ekspresi reguler mencari teks yang sama dengan pgdemo-a, tetapi di baris perintah skrip kurung sikunya tertulis apa adanya sehingga tidak lagi cocok. Saat pola ini diberikan ke skrip yang sama, baris skrip hilang dan hanya empat baris yang tersisa.

bash chk.sh '[p]gdemo-a'
2141 timeout 300 ./pgdemo-a 300
2143 ./pgdemo-a 300
2150 timeout 300 ./pgdemo-a 301
2152 ./pgdemo-a 301

3️⃣ Opsi kondisi pgrep

  • ↪️ -u akun, -x nama persis, -n dan -o, -c jumlah

Dengan -x, pgrep hanya mencari proses yang seluruh namanya sama, bukan sebagian. Dengan pgdemo tidak ada yang muncul, dan dengan pgdemo-a muncul dua.

pgrep -x pgdemo
pgrep -lx pgdemo-a
2143 pgdemo-a
2152 pgdemo-a

-u memilih proses berdasarkan akun yang menjalankannya. Jika beberapa akun ditulis dengan pemisah koma, semua proses milik salah satu akun itu akan ditemukan. Ketiga proses yang dijalankan sebagai root muncul semua dengan [-u root], dan dengan [-u daemon] tidak ada satu pun.

pgrep -u root -l pgdemo
2143 pgdemo-a
2152 pgdemo-a
2155 pgdemo-b
pgrep -u daemon -l pgdemo
pgrep -u root,daemon -c pgdemo
3

Saat menulis akun yang tidak ada, muncul galat [invalid user name] bersama kode keluar 2.

pgrep -u no-such-user9 pgdemo
pgrep: invalid user name: no-such-user9

Di akun biasa server Debian 12, kami juga menemukan satu sleep yang dijalankan dengan akun itu sendiri menggunakan opsi yang sama.

pgrep -u user1 -l sleep
3047 sleep
pgrep -u user1 -a sleep
3047 sleep 60

Jika ada beberapa proses dengan nama yang sama, -n hanya mencetak yang paling baru dijalankan dan -o hanya yang paling awal dijalankan. Dari dua pgdemo-a yang dijalankan berselang 2 detik, -n memilih yang belakangan dan -o yang lebih dulu.

pgrep -n pgdemo-a
2152
pgrep -o pgdemo-a
2143

Halaman man menyebutkan bahwa -n dan -o tidak dapat dipakai bersamaan. Saat keduanya ditulis, hanya petunjuk penggunaan yang muncul, tanpa pesan galat.

-c mencetak jumlah, bukan nomor. Jika tidak menemukan apa pun, perintah ini mencetak 0 dan kode keluarnya 1.

pgrep -c pgdemo
3
pgrep -c pgdemo-zz
0

Berikut ringkasan opsi pgrep.

OpsiSalinPenjelasan
-f--fullMencari di seluruh baris perintah, bukan di nama
-l--list-nameMencetak nama bersama nomor
-a--list-fullMencetak seluruh baris perintah bersama nomor
-x--exactHanya mencari proses yang seluruh namanya sama
-u--euidHanya proses yang dijalankan akun tertentu; jika beberapa ditulis dengan koma, salah satunya
-n--newestYang paling baru dijalankan di antara yang cocok
-o--oldestYang paling awal dijalankan di antara yang cocok
-c--countMencetak jumlah, bukan nomor; kode keluar 1 jika 0
-d--delimiterMenentukan pemisah antarnomor (baris baru secara bawaan)
-V--versionMencetak versi
OpsiSalinPenjelasan
-i--ignore-caseMencari tanpa membedakan huruf besar dan kecil
-v--inverseMencari proses yang tidak cocok
-P--parentHanya proses anak dari nomor induk (PPID) tertentu
-t--terminalHanya proses yang terhubung ke terminal tertentu
-g--pgroupHanya proses dalam nomor grup proses tertentu
-s--sessionHanya proses dalam nomor sesi tertentu
-U--uidHanya proses dengan ID pengguna nyata yang sama
-G--groupHanya proses dengan ID grup nyata yang sama
-w--lightweightMencetak semua nomor thread, bukan nomor proses

🔲 Simulator perintah pgrep

Simulator di bawah dimulai dengan daftar enam baris pgdemo dan timeout ditambah proses contoh. Ketuk chip untuk membandingkan baris yang ditemukan setiap opsi di daftar sebelah kiri, lalu lihat dengan [pgrep -l pgdemo] bagaimana hasilnya berkurang setelah [pkill pgdemo-b].

Simulator perintah pgrepprocps-ng 3.3
[root@server work]#
Hanya berjalan di dalam browser. Daftar di sebelah kiri berisi nilai contoh, dan [Just matched] ditambahkan di samping baris yang ditemukan pgrep. [pkill] hanya meniru dengan menghapus baris dari daftar.

4️⃣ Perbedaan pgrep, pidof, dan pkill

  • ↪️ pidof mencari nama persis, pkill mengirim sinyal

pidof hanya mencari proses yang seluruh nama programnya sama, tanpa ekspresi reguler, dan mencetak nomor dalam satu baris yang dipisahkan spasi. Saat pgdemo-a dicari, dua nomor muncul dalam satu baris, dan 2152 yang dijalankan belakangan ada di depan.

pidof pgdemo-a
2152 2143

Dengan sebagian nama pgdemo, berbeda dari pgrep, pidof tidak menemukan apa pun dan kode keluarnya 1. Jika hanya perlu satu nomor, tambahkan -s. [pidof -s pgdemo-a] hanya mencetak 2152.

pidof pgdemo
pidof -s pgdemo-a
2152

Untuk melihat waktu mulai dan nomor induk (PPID) dari nomor yang ditemukan, gabungkan nomor itu dengan koma menggunakan pgrep -d lalu berikan ke -p pada perintah ps.

pgrep -d, pgdemo
2143,2152,2155
ps -fp $(pgrep -d, -x pgdemo-a)
UID          PID    PPID  C STIME TTY          TIME CMD
root        2143    2141  0 15:59 ?        00:00:00 ./pgdemo-a 300
root        2152    2150  0 15:59 ?        00:00:00 ./pgdemo-a 301

Angka 2141 dan 2150 di kolom PPID adalah nomor timeout yang menjalankan kedua pgdemo-a.

pkill mencari proses dengan kondisi yang sama seperti pgrep, tetapi mengirim sinyal alih-alih mencetak nomornya. Jika sinyal tidak ditulis, pkill mengirim SIGTERM, dan sinyal dapat diganti seperti [pkill -HUP nama].

pkill langsung mengirim sinyal begitu menemukan proses, jadi periksa dulu targetnya dengan [pgrep -a] atau [pgrep -af] dengan kondisi yang sama. Jika mencari dengan -f, timeout atau skrip yang baris perintahnya mengandung teks yang sama juga menjadi target. Jika nomornya sudah diketahui, kirim sinyal hanya ke nomor itu dengan perintah kill.

PerintahDasar pencarianOutputFungsi
pgrepSebagian nama (regex), dengan -f seluruh baris perintahNomor; nama dan baris perintah dengan -l, -aHanya mencari
pidofSeluruh nama programNomor dalam satu barisHanya mencari
pkillKondisi sama dengan pgrepTidak adaSinyal ke proses yang ditemukan (bawaan SIGTERM)

🔢 FAQ & Konten yang Direkomendasikan

pgrep hanya membandingkan nama proses sampai 15 karakter yang tersimpan di /proc/PID/stat. Jika nama lebih dari 15 karakter, cari dengan 15 karakter pertama atau gunakan -f untuk mencari di seluruh baris perintah dari /proc/PID/cmdline.

Jika daftar ps disaring dengan grep, baris perintah grep itu juga mengandung nama yang dicari sehingga bisa ikut muncul di hasil. pgrep tidak memasukkan dirinya sendiri ke hasil dan hanya mencetak nomor, sehingga mudah diteruskan ke perintah lain.

Dengan -v, pgrep membalik kondisi dan mencari proses yang tidak cocok. Di pkill, opsi pendek -v tidak dapat dipakai untuk mencegah kesalahan.

ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 7   +   5   =