Yanıtlar:
ps aux
tam komut satırını (yol ve parametreler) içerir; pgrep yalnızca çalıştırılabilir adların ilk 15 karakterine bakarps aux
Her işlemin tam komut satırını döndürür, ancak pgrep
yalnızca çalıştırılabilir dosyaların adlarına bakar.
Bu, grepping ps aux
çıktısının yoldaki herhangi bir şeyle eşleşeceği veya 'ikili' bir işlemin parametreleriyle eşleşeceği anlamına gelir.
ps aux | grep php5
eşleşecek /usr/share/php5/i-am-a-perl-script.pl
pgrep php5
olmazSistemimden bir örnek alın - yalnızca python kullanacağız php5
:
ps aux | grep python
bize verir:izx 2348 0,0 0,7 514928 15644? Sl Jun24 0:00 / usr / bin / python / usr / lib / birlik-lens-video / birlik-lens-video izx 2444 0,0 0,9 547392 18864? Sl Jun24 0:01 / usr / bin / python / usr / lib / birlik kapsamı-video-uzaktan / birlik-kapsamı-video-uzaktan kök 2805 0.0 0.5 95436 12204? S Jun24 0:00 / usr / bin / python / usr / lib / sistem servisi / sistem servisi-d izx 6272 0,0 2,9 664400 60320? SNL Jun24 1:16 / usr / bin / python / usr / bin / güncelleme yöneticisi - haritada odaklanma kök 11729 0.0 0.9 180508 19516? S Jun25 0:00 python / usr / lib / yazılım özellikleri / yazılım özellikleri - dbus
pgrep python
sadece 11729
yukarıdaki listede göreceğiniz iadeler :kök 11729 0.0 0.9 180508 19516? S Jun25 0:00 python / usr / lib / yazılım özellikleri / yazılım özellikleri - dbus
/proc/<pid>/stat
ama ondan almamasıdır/proc/<pid>/cmdline
. Tamam, @Thorsen, böcek spreyini sen kazandın, bu bir böcek: P
pgrep
mantıksız bir komut değil. İyi çalışıyor ve tasarlandığı gibi. Mesele şu ki, çalıştırdığınızda bir seçeneği kaçırıyorsunuz, bunun pgrep
için suçlayamazsınız . Kullanımı ps aux | grep xxx
güvenilmezdir, bu yüzden grep
çıktıdan kendini filtrelemek için bilgisayar korsanlarına ihtiyaç duyar ve bunun gibi yanlış pozitifler verebilir ps aux | grep root
.
ps aux | grep x
Komut "daha iyi" sonuçlar verir pgrep x
Eğer ikincisi ile bir seçenek eksik olduğu esasen.
Tam komut satırında arama yapmak için -f
seçeneği kullanın, pgrep
yalnızca varsayılan davranışı olan işlem adını değil, örneğin:
pgrep -f php5
Çizgiyi ps | grep
filtrelemeniz grep
veya desen numaralarını kullanmanız gereken yapıdan farklı olarak , pgrep
sadece tasarım yoluyla kendini seçmeyecektir.
Üstelik, şablonunuz ps
USER
sütununda göründüğünde , çıktıda istenmeyen işlemler elde edersiniz pgrep
, bu kusurdan zarar görmez.
Sadece çantalar yerine tüm detayları görmek istiyorsanız, şunları kullanabilirsiniz:
ps wup $(pgrep -f python)
olandan daha basit ve daha güvenilir
ps aux | grep python | grep -v grep
veya
ps aux | grep p[y]thon
-a
( --list-full
) seçeneğini de ekleyin . (Eski pgrep yoktu -a
, bunu yaptı-fl
.)
pgrep
güzel bir çözüm bulmaya çalışanları veriyor . +1
/proc/self/cmdline
"açıklayıcı" olarak değiştirilirse , pgrep -fa ruby
örneğin eşleşmeyecektir. puma 3.3.0 (tcp://localhost:3000) [MIQ: Web Server Worker]
, iken "dumber" pgrep -a ruby
olacak. İkincisinin de kandırılabileceğinden emin değilim.
pgrep
ve ps
.
diff <(ps aux|grep x) <(pgrep x) # :)
Şu anda, pgrep ilk 4.096 karakterle sınırlı olduğundan (genellikle uzun bir sınıfyoluna sahip bir Java programının giriş sınıfını arayan Java kullanıcılarını etkiler) ps
olduğundan daha eksiksiz bir sonuç verecektir pgep -f
. Bunu izleyen hata: https://gitlab.com/procps-ng/procps/issues/86