Pgrep'in tam işlem bilgisini göstermesi nasıl sağlanır?


26

Yaptığı pgrepher işlemle ilgili tüm bilgileri bana vermenin bir yolu var mı ps? Ben psiçinden geçebileceğimi biliyorum grepama bu çok fazla yazma ve bana grepistemediğim bir işlem de veriyor .

Yanıtlar:


22

pgrepçıkış seçenekleri oldukça sınırlıdır. Neredeyse kesinlikle psönemli bilgileri almak için geri göndermeniz gerekir . Bunu, içindeki bir bash işlevini kullanarak otomatikleştirebilirsiniz ~/.bashrc.

function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }

Sonra komutu ile çağır.

ppgrep <pattern>

2
Teşekkürler! Bunu şu şekilde değiştirdim: function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } Aksi halde, aramanızla eşleşen hiçbir işlem yoksa, tüm pskullanım megilla'sını doldurur.
JoelFan

OS X'te psbayraklar için kısa çizgi gerekir:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
Erik Nomitch

1
Ps kullanım sayfasından kaçınmak istiyorsanız, GNU xargs'ın bir seçeneği vardır, -rbu sadece bir liste alınmışsa komutu çalıştıracaktır.
Doug

1
Daha özlü bir yoldurps fp $(pgrep -d, "$@")
Igor Mikushkin

14

Birleştirin pgrepile pskullanarak xargs!

pgrep <your pgrep-criteria> | xargs ps <your ps options> -p

Örneğin dene

pgrep -u user | xargs ps -f -p

tam bir işlem listesi almak için user.

Sütun adlarıyla ilk satırı tutmanız çok hoş. grepsütun adlarını daima bırakır.


mükemmel! Bu, xfvb için arcgis server başlangıç ​​betiği ile ilgili garip bir sorunu çözüyor
prusswan

Bu kabul edilen cevap olmalıdır, çünkü unix borularını uygun şekilde kullanır, bir aletten PID'lerin bir listesini alır ve diğerine geri beslenir (korsanlık gibi görünüyorsa, bu değildir - bu teknik LOTS of UNIX aletlerinde kullanılabilir. , e-posta grep araçları gibi. Bash işlevi ppgrep () gereksiz bir bağımlılıktır ve burada sunulan öğrenme fırsatını karşılamayı önler.)
Scott Prive

10

Aşağıdaki sadece size PID + tam komut satırı verir. "Bütün bilgiler psyapar" için diğer cevaplara bakınız ...

Çoğu Linux dağıtımları kullanmak PROCPS-ng . 3.3.4'ten beri (2012'de yayınlandı), pgrep -a( --list-full) komut satırının tamamını gösterir.
Not: Varsayılan olarak, pgrep yalnızca çalıştırılabilir ada göre verdiğiniz kalıpla eşleşir. Eğer tam komut satırı ile eşleşmek istiyorsanız (grepping ps'in yaptığı gibi), -f( --full) seçeneğini ekleyin .

(Orijinal dahil eski sürümlerinde PROCPS proje), -lopsiyon bilgi gösterdi ama onun davranışları değişiyordu:

  • pgrep -fl Deseni tam komut satırıyla eşleştirdi ve tam komut satırını gösterdi.
  • pgrep -ltek başına yalnızca çalıştırılabilir adla eşleşti ve yalnızca çalıştırılabilir ad gösterdi.
    Tam eşleşme istemiyorsanız, komut satırının tamamını göremezsiniz :-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]

Hangi kodu * BSD kullandığından emin değil, ancak man sayfaları eski -fldavranışı belgeliyor .

Maalesef -fltaşınabilir bile kullanamazsınız - son işlemlerde, -f( --list-name) her zaman yalnızca çalıştırılabilir adı yazdırır.


4

Linux

GNU sürümü pgrepiçin -i(büyük küçük harf duyarlılığı yoktur) desteklenmez ve uzun + bulanık çıktı elde edilir -af.

$ pgrep -af apache

OUTPUT:
    1748 /usr/sbin/apache2 -k start

Man sayfası :

   -a, --list-full
       List  the  full  command line as well as the process ID.  (pgrep only.)

   -f, --full
       The pattern is normally only matched against the process name.  
       When -f is set, the full command  line is used.

Mac os işletim sistemi

OSX'de (ve çıkarımla, BSD'de) -l( uzun çıktı ) birlikte -f( tam argüman listelerine göre ) tamamlandı komutunu görüntüler (büyük -iküçük harf duyarlılığı ekler):

$ pgrep -fil ssh

OUTPUT:
    33770 ssh: abc@192.168.0.123-22 [mux] t

Adam sayfa :

 -l          Long output.  For pgrep, print the
             process name in addition to the
             process ID for each matching
             process.  If used in conjunction
             with -f, print the process ID and
             the full argument list for each
             matching process.  For pkill, dis-
             play the kill command used for
             each process killed.

1

Grep için -v seçeneğini kullanın - herşeyi döndürür, ancak istenen kalıbı döndürür.

ps -ef | grep <process> | grep -v grep

Bu benim için en iyi cevaptı. Size olduğu gibi pgrep -u user | xargs ps -f -p
kesilmeden

0

Olduğunu sanmıyorum, alabileceğiniz en fazla bilgi pgrep için -l seçeneğini kullanarak adı ve işlem kimliğidir.

ps her türlü biçimlendirme seçeneğini destekler, bu yüzden yazmayı kaydetmek istediğinize bir takma ad veririm. grep -v grepHerhangi bir grep işlemini hariç tutmak için ilave bir boru içerecek şekilde grep işlemini çıktımızdan çıkarmanın basit bir yolu .



-1

Bu size yardımcı olacaktır sanırım:

ps auxww


2
Lütfen detaylandırır mısınız? Daha fazla bilgi bu cevabı geliştirir
Dave M
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.