Ps çıkışını ayrıştırma tek bir komut kullanarak çalışan bir işlemin pid nasıl elde edilir?


22

Çalışan bir işlemin pidini döndüren tek bir satır arıyorum.

Şu anda var:

ps -A -o pid,cmd|grep xxx|head -n 1

Ve bu yumruk verir pid, command. Sadece çıktıdaki ilk sayıya ihtiyacım var ve gerisini görmezden geldim. Sanırım burada yardımcı olur sedya awkda yardımcı olurum ama onlarla olan deneyimim sınırlı.

Ayrıca, bunun başka bir sorunu var, eğer xxx çalışmıyorsa grep pidini döndürür.

Tek bir çizgiye sahip olmak gerçekten önemlidir, çünkü çıktıyı tekrar kullanmak istiyorum, bu süreci öldürmek gibi.


1
borudan geçirin ve -n 1 ile döndürülecek satırı belirtin?
Mike McMahon

Yanıtlar:


28

Sadece sürecin pidini istiyorsanız, pgrepmümkünse yararlanabilirsiniz. pgrep <command>komutun iadesini (ya da çalışan komutun birden fazla örneği olması durumunda, pids listesini döndürür, bu durumda headya da diğer uygun komutlardan faydalanabilirsiniz )
Bunun yardımcı olacağını umuyorum !


+1 Genel pgrep kullanımımı:kill `pgrep xxx`
Steve

20
@ steve: Belki de bakmalısın pkill.
sonraki duyuruya kadar duraklatıldı.

7

Sadece bir komut daha gerekiyor; sadece ilk alanı boşlukla ayrılmış değerler satırından istiyorsan:

ps -A -o pid,cmd|grep xxx | grep -v grep |head -n 1 | awk '{print $1}'

Peki, iki. Grep'i çıktıdan çıkarmak için başka bir grep ekledim.


6

Sadece pgrep kullanın, çok daha yalındır

pgrep -o -x xxxx

Yukarıdaki, tam adı olan en eski işlemi seçer.


Ve OP, süreci öldürmek için komutu kullanmak istediğinden, pkill(aynı sınırlarda) en doğrudan seçim olacaktır.
bstpierre


0

Cygwin'de çalışarak -A ve -o kullanamıyorum, ama bunun gibi bir şey:

$ ps
      PID    PPID    PGID     WINPID   TTY     UID    STIME COMMAND
     4580       1    4580       4580  ?       55573   May 21 /usr/bin/mintty
     5808    7072    5808       7644  pty3    55573 13:35:31 /usr/bin/ps
     7072    5832    7072       6424  pty3    55573   May 21 /usr/bin/bash


$ ps | grep '/usr/bin/mintty' | head -n 1 | awk '{print $1}'
4580

0

gibi bir şey yapabilirsin

ps -A -o cmd,pid | egrep "^xxx " | head -n 1 | sed -r -e 's/.* ([0-9]+)$/\1/'

o zaman xxx işlemin adı olmalı ve çapa nedeniyle grep almaz.

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.