pgrep komutu: Ada göre PID bulma, -f seçeneği ve pidof ile pkill farkı
Çalışan bir sürecin numarasını (PID) adına, hesabına veya komut satırına göre bulmak için pgrep komutu kullanılır. Bir AlmaLinux 9 sunucusunda sleep programını farklı adlarla kopyalayıp üç süreç başlattık ve her seçeneğin bulduğu süreçleri karşılaştırdık. Ada göre aramada yalnızca bu üç süreç çıktı; -f ile tüm komut satırında aramada ise onları başlatan timeout da birlikte çıktı.
Aşağıdaki çıktılar bir AlmaLinux 9.8 sunucusundaki root hesabında ve bir Debian 12 sunucusundaki normal bir hesapta çalıştırılan komutların sonuçlarıdır. Aranan süreçler, sleep programının pgdemo-a ve pgdemo-b adlarıyla kopyalanıp 5 dakika sonra kendiliğinden bitmesi için timeout 300 ile başlatılmış kopyalarıdır. Süreç numaraları (PID) ve Debian hesap adı (user1) örnek değerlerle değiştirildi; AlmaLinux sunucusundaki procps-ng sürümü yalnızca ana ve alt sürüme kadar yazıldı.
1️⃣ pgrep komutunun temel kullanımı
pgrep komutundan sonra bir adın bir kısmını yazarsanız, adında bu karakterler geçen süreçlerin numaralarını her satıra bir tane olacak şekilde yazdırır. pgdemo ile aramada iki pgdemo-a ve bir pgdemo-b olmak üzere üç numara çıktı.
pgrep pgdemo2143
2152
2155Adı pgdemo-a olarak yazınca yalnızca iki pgdemo-a kaldı.
pgrep pgdemo-a2143
2152Aranan metin genişletilmiş düzenli ifade olarak okunur ve seçenek verilmezse yalnızca süreç adında aranır.
Eşleşen süreç yoksa hiçbir şey yazdırmadan biter; bu yüzden sonuç çıkış koduyla kontrol edilir. Var olmayan pgdemo-zz adını aradıktan sonra [echo $?] çalıştırıldığında 1 çıktı.
pgrep pgdemo-zzecho $?1Hiçbir koşul yazmadan çalıştırınca aşağıdaki hatayla birlikte çıkış kodu 2 çıktı. man sayfası çıkış kodlarını 0 (bulundu), 1 (bulunamadı), 2 (komut satırı söz dizimi hatası) ve 3 (bellek yetersizliği gibi ölümcül hata) olarak açıklar.
pgreppgrep: no matching criteria specified
Try `pgrep --help' for more information.echo $?2Çıktı yerine bu çıkış kodunu koşul olarak kullanırsanız, bir betik bir sürecin çalışıp çalışmadığını kontrol edebilir. Sürüm [pgrep -V] ile görülür. Debian 12 sunucusunda procps-ng 4.0.2, AlmaLinux 9.8 sunucusunda procps-ng 3.3 vardı.
pgrep -Vpgrep from procps-ng 4.0.22️⃣ pgrep -f seçeneği ve -l, -a çıktısı
Yalnızca numaradan hangi süreç olduğu anlaşılmaz; bu yüzden -l ile adı, -a ile tüm komut satırını birlikte yazdırırsınız.
pgrep -l pgdemo2143 pgdemo-a
2152 pgdemo-a
2155 pgdemo-bpgrep -a pgdemo2143 ./pgdemo-a 300
2152 ./pgdemo-a 301
2155 ./pgdemo-b 300-a çıktısının sonundaki 300 ve 301, sleep programına verilen saniye cinsinden argümanlardır. Aynı adlı iki pgdemo-a sürecini bu argümanlarla ayırt ettik.
-f eklenince pgrep ad yerine tüm komut satırında arar. pgdemo-a, -f ile arandığında numaralar ikiden dörde çıktı.
pgrep -f pgdemo-a2141
2143
2150
2152-a de eklenince, artan iki satırın pgdemo-a değerini argüman olarak alıp çalıştıran timeout süreçleri olduğu görüldü. Adları timeout olsa da komut satırlarında pgdemo-a geçtiği için -f koşuluna uydular.
pgrep -af pgdemo-a2141 timeout 300 ./pgdemo-a 300
2143 ./pgdemo-a 300
2150 timeout 300 ./pgdemo-a 301
2152 ./pgdemo-a 301Bir betik içinde -f kullanırken betiğin kendisinin sonuçta çıkıp çıkmadığını kontrol edin. pgrep kendi sürecini sonuca hiç eklemez; ancak pgrep komutunu çalıştıran betiğin komut satırında aranan metin varsa o betik de sonuçta çıkar.
Aldığı metni olduğu gibi [pgrep -af] komutuna veren chk.sh betiğiyle pgdemo-a arandığında, son satıra betiğin kendisi olan bash chk.sh pgdemo-a eklendi.
bash chk.sh pgdemo-a2141 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İlk harfi köşeli parantez içine alınmış [p]gdemo-a deseni, düzenli ifade olarak pgdemo-a ile aynı metni bulur; ancak betiğin komut satırında köşeli parantezler olduğu gibi yazılı olduğundan koşula uymaz. Bu desen aynı betiğe verilince betik satırı kayboldu ve yalnızca dört satır kaldı.
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 3013️⃣ pgrep koşul seçenekleri
-x eklenince pgrep adın bir kısmı yerine yalnızca adın tamamı aynı olan süreçleri bulur. pgdemo ile hiçbir şey çıkmadı, pgdemo-a ile aramada iki süreç çıktı.
pgrep -x pgdemopgrep -lx pgdemo-a2143 pgdemo-a
2152 pgdemo-a-u süreçleri onları başlatan hesaba göre seçer. Virgülle ayrılmış birden çok hesap yazarsanız bu hesaplardan herhangi birine ait tüm süreçleri bulur. root ile başlatılan üç sürecin hepsi [-u root] ile çıktı, [-u daemon] ile hiçbiri çıkmadı.
pgrep -u root -l pgdemo2143 pgdemo-a
2152 pgdemo-a
2155 pgdemo-bpgrep -u daemon -l pgdemopgrep -u root,daemon -c pgdemo3Var olmayan bir hesap yazınca [invalid user name] hatasıyla birlikte çıkış kodu 2 çıktı.
pgrep -u no-such-user9 pgdemopgrep: invalid user name: no-such-user9Debian 12 sunucusundaki normal hesapta da kendi hesabıyla başlatılan tek bir sleep sürecini aynı seçeneklerle bulduk.
pgrep -u user1 -l sleep3047 sleeppgrep -u user1 -a sleep3047 sleep 60Aynı adlı birden çok süreç olduğunda -n yalnızca en son başlatılanı, -o yalnızca ilk başlatılanı yazdırır. 2 saniye arayla başlatılan iki pgdemo-a sürecinden -n sonrakini, -o öncekini seçti.
pgrep -n pgdemo-a2152pgrep -o pgdemo-a2143man sayfası -n ve -o seçeneklerinin birlikte kullanılamayacağını açıklar. İkisi birlikte yazılınca hata iletisi olmadan yalnızca kullanım bilgisi çıktı.
-c numaralar yerine sayıyı yazdırır. Hiçbir şey bulamazsa 0 yazdırır ve çıkış kodu 1 oldu.
pgrep -c pgdemo3pgrep -c pgdemo-zz0pgrep seçeneklerinin özeti aşağıdadır.
| Seçenek | Kopyala | Açıklama |
|---|---|---|
| -f--full | Ad yerine tüm komut satırında ara | |
| -l--list-name | Numarayla birlikte adı yazdır | |
| -a--list-full | Numarayla birlikte tüm komut satırını yazdır | |
| -x--exact | Yalnızca adın tamamı aynı olan süreçleri bul | |
| -u--euid | Yalnızca belirtilen hesabın başlattığı süreçler; virgülle birden çok yazılırsa herhangi biri | |
| -n--newest | Eşleşenler arasında en son başlatılan | |
| -o--oldest | Eşleşenler arasında ilk başlatılan | |
| -c--count | Numara yerine sayı yazdır; 0 ise çıkış kodu 1 | |
| -d--delimiter | Numaralar arasındaki ayırıcıyı belirle (varsayılan satır sonu) | |
| -V--version | Sürümü yazdır |
| Seçenek | Kopyala | Açıklama |
|---|---|---|
| -i--ignore-case | Büyük-küçük harf ayırmadan ara | |
| -v--inverse | Koşula uymayan süreçleri bul | |
| -P--parent | Yalnızca belirtilen üst süreç numarasının (PPID) alt süreçleri | |
| -t--terminal | Yalnızca belirtilen terminale bağlı süreçler | |
| -g--pgroup | Yalnızca belirtilen süreç grubu numarasındaki süreçler | |
| -s--session | Yalnızca belirtilen oturum numarasındaki süreçler | |
| -U--uid | Yalnızca gerçek kullanıcı kimliği aynı olan süreçler | |
| -G--group | Yalnızca gerçek grup kimliği aynı olan süreçler | |
| -w--lightweight | Süreç numarası yerine tüm iş parçacığı numaralarını yazdır |
🔲 pgrep komutu simülatörü
Aşağıdaki simülatör, pgdemo ve timeout için altı satıra örnek süreçlerin eklendiği bir listeyle başlar. Çiplere dokunarak her seçeneğin bulduğu satırları soldaki listede karşılaştırabilir, [pkill pgdemo-b] sonrasında [pgrep -l pgdemo] ile sonucun nasıl azaldığını görebilirsiniz.
4️⃣ pgrep, pidof ve pkill farkı
pidof düzenli ifade kullanmadan yalnızca program adının tamamı aynı olan süreçleri bulur ve numaraları tek satırda boşlukla ayırarak yazdırır. pgdemo-a arandığında iki numara tek satırda çıktı; sonra başlatılan 2152 öndeydi.
pidof pgdemo-a2152 2143Adın bir kısmı olan pgdemo ile pgrep komutunun aksine hiçbir şey bulunamadı ve çıkış kodu 1 oldu. Yalnızca bir numara gerekiyorsa -s ekleyin. [pidof -s pgdemo-a] yalnızca 2152 yazdırdı.
pidof pgdemopidof -s pgdemo-a2152Bulunan numaraların başlangıç zamanını ve üst süreç numarasını (PPID) görmek için numaraları pgrep -d ile virgülle birleştirip ps komutu ile -p seçeneğine verin.
pgrep -d, pgdemo2143,2152,2155ps -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 301PPID sütunundaki 2141 ve 2150, iki pgdemo-a sürecini başlatan timeout süreçlerinin numaralarıdır.
pkill süreçleri pgrep ile aynı koşullarla bulur, ancak numaralarını yazdırmak yerine onlara sinyal gönderir. Sinyal yazılmazsa SIGTERM gönderir; sinyali [pkill -HUP ad] örneğindeki gibi değiştirebilirsiniz.
pkill eşleşme bulur bulmaz sinyal gönderdiği için hedefleri önce aynı koşullarla [pgrep -a] veya [pgrep -af] ile kontrol edin. -f ile aranırsa komut satırında aynı metin geçen timeout veya betikler de hedefe girer. Numarayı zaten biliyorsanız kill komutu ile yalnızca o numaraya sinyal gönderin.
| Komut | Arama ölçütü | Çıktı | Görev |
|---|---|---|---|
| pgrep | Adın bir kısmı (regex), -f ile tüm komut satırı | Numaralar; -l, -a ile ad ve komut satırı | Yalnızca bulur |
| pidof | Program adının tamamı | Numaralar tek satırda | Yalnızca bulur |
| pkill | pgrep ile aynı koşullar | Yok | Bulunan süreçlere sinyal (varsayılan SIGTERM) |
🔢 SSS & önerilen içerikler
Gerçek zamanlı kontrol
Linux top komutu (CPU ve bellek kullanımını görme)
Her sürecin ne kadar CPU ve bellek kullandığını gerçek zamanlı gösteren komut.
Açık dosyalar
[Linux] lsof komutu: kullanımdaki dosya bilgilerini yazdırma
Bir sürecin açık tuttuğu dosyaları PID ile birlikte gösteren komut.
İş kontrolü
Linux'ta arka plan (Back Ground) ve ön plan (Fore Ground): süreçleri kontrol etme
Bir komutu arka plana gönderip yeniden ön plana getiren iş kontrolü yöntemidir.
ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.