Neden "ps aux | grep x ”,“ pgrep x ”den daha iyi sonuçlar verir mi?

72

Ubuntu'mda şu komutu denedim, bir şey göstermiyor:

pgrep php5

php5'in işlem kimliğini döndürmemelidir (aşağıdaki komut sadece bunu yapar)?:

ps aux | grep php5

Peki, bu iki komut arasındaki fark nedir?

    
sordu xczzhh 28.06.2012 11:43

3 cevap

62

ps aux , tam komut satırını (yol ve parametreler) içerirken, pgrep yalnızca yürütülebilir dosya adlarının ilk 15 karakterine bakar.

ps aux , her işlemin tam komut satırını döndürürken, pgrep yalnızca yürütülebilir dosya adlarına bakar.

Bu, yansıtma ps aux çıktısının yoldaki veya işlemin ikili parametrelerindeki parametrelerle eşleşeceği anlamına gelir: ör. '

  • ps aux | grep php5 , /usr/share/php5/i-am-a-perl-script.pl eşleşecek
  • ancak pgrep php5 olmaz

Sistemimden bir örnek al - sadece php5 yerine python kullanacağız:

  • ps aux | grep python bize şunu veriyor:
izx       2348  0.0  0.7 514928 15644 ?        Sl   Jun24   0:00 /usr/bin/python /usr/lib/unity-lens-video/unity-lens-video
izx       2444  0.0  0.9 547392 18864 ?        Sl   Jun24   0:01 /usr/bin/python /usr/lib/unity-scope-video-remote/unity-scope-video-remote
root      2805  0.0  0.5  95436 12204 ?        S    Jun24   0:00 /usr/bin/python /usr/lib/system-service/system-service-d
izx       6272  0.0  2.9 664400 60320 ?        SNl  Jun24   1:16 /usr/bin/python /usr/bin/update-manager --no-focus-on-map
root     11729  0.0  0.9 180508 19516 ?        S    Jun25   0:00 python /usr/lib/software-properties/software-properties-dbus
  • Ancak pgrep python , yukarıdaki listeden göreceğiniz yalnızca 11729 değerini döndürür:
root     11729  0.0  0.9 180508 19516 ?        S    Jun25   0:00 python /usr/lib/software-properties/software-properties-dbus
    
verilen cevap ish 28.06.2012 12:00
70

ps aux | grep x komutu, pgrep x değerinden "daha iyi" sonuçlar verir çünkü temelde bir seçeneği kaçırıyorsunuzdur.

Tam komut satırını aramak için -f 'si için pgrep seçeneğini kullanmanız yeterlidir, yalnızca varsayılan davranışı olan işlem adını değil, örneğin:

pgrep -f php5

ps | grep satırını filtrelemek veya desen püf noktalarını kullanmak için ihtiyaç duyduğunuz grep yapısından farklı olarak, pgrep tasarım tarafından kendisini seçmez.

Ayrıca, kalıbınız ps USER sütununda görünürse, çıktıda istenmeyen işlemler olur, pgrep bu kusurdan zarar görmez.

Yalnızca pids yerine tüm ayrıntıları istiyorsanız, şunları kullanabilirsiniz:

ps wup $(pgrep -f python)

hangisi daha basit ve daha güvenilir

ps aux | grep python | grep -v grep

veya

ps aux | grep p[y]thon
    
verilen cevap jlliagre 09.09.2012 10:37
1
diff <(ps aux|grep x) <(pgrep x) # :)
    
verilen cevap Thorsen 28.06.2012 12:09

Etiketlerdeki diğer soruları oku