Yanıtlar:
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>
ps
bayraklar için kısa çizgi gerekir:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
bu sadece bir liste alınmışsa komutu çalıştıracaktır.
ps fp $(pgrep -d, "$@")
Birleştirin pgrep
ile ps
kullanarak 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ş. grep
sütun adlarını daima bırakır.
Aşağıdaki sadece size PID + tam komut satırı verir. "Bütün bilgiler ps
yapar" 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), -l
opsiyon 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 -l
tek başına yalnızca çalıştırılabilir adla eşleşti ve yalnızca çalıştırılabilir ad gösterdi. Hangi kodu * BSD kullandığından emin değil, ancak man sayfaları eski -fl
davranışı belgeliyor .
Maalesef -fl
taşınabilir bile kullanamazsınız - son işlemlerde, -f
( --list-name
) her zaman yalnızca çalıştırılabilir adı yazdırır.
GNU sürümü pgrep
iç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
-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.
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 -i
küçük harf duyarlılığı ekler):
$ pgrep -fil ssh
OUTPUT:
33770 ssh: abc@192.168.0.123-22 [mux] t
-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.
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
pgrep -u user | xargs ps -f -p
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 grep
Herhangi 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 .
grep
Süreci ortadan kaldırmak için , deseninizin bir parçası olarak parantez kullanabilirsiniz:
ps -ef | grep '[t]ty'
Bunu ps
ve ile yapabilirsiniz pgrep
:
ps -fp $(pgrep -d, tty)
Bu size yardımcı olacaktır sanırım:
ps auxww
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }
Aksi halde, aramanızla eşleşen hiçbir işlem yoksa, tümps
kullanım megilla'sını doldurur.