Belirli bir işlem için yalnızca kullanıcı, pid ve komut nasıl çalıştırılır? (Ubuntu 11.10)


19

Ne zaman ben ps -ef|grep pythonaşağıdakileri elde:

myusername  4492  2994  0 10:32 pts/0    00:00:01 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665     1  0 10:42 ?        00:00:00 /usr/bin/python /usr/lib/system-service/system-service-d
myusername 14051 13497  0 11:28 pts/7    00:00:00 grep --color=auto python

Bunun yerine yalnızca işlemi çalıştıran kullanıcıyı , pid'i ve komutu aşağıdaki çıktıdaki gibi çalıştırarak nasıl edinebilirim ?

myusername  4492 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665 /usr/bin/python /usr/lib/system-service/system-service-d

Bu çalışıyor mu? ps --fields="user pid command"
pratnala

Denemedim. İnternette buldum. Artık bir Ubuntu makinesinin yanında değil. Afedersiniz. Daha sonra görecek ve size haber vereceğim
pratnala

Hayır, HATA: Bilinmeyen GNU seçeneği var. Sizin için çalışıyor mu?
Bentley4

Yanıtlar:


13

Sanırım -o argümanını arıyorsunuz:

-o biçimi:

kullanıcı tanımlı biçim. format, tek tek çıktı sütunlarını belirtmenin bir yolunu sunan boş ayrılmış veya virgülle ayrılmış liste biçimindeki tek bir bağımsız değişkendir. Tanınan anahtar kelimeler aşağıdaki STANDART BİÇİM BELİRLEYİCİLER bölümünde açıklanmaktadır. Üstbilgiler istenildiği gibi yeniden adlandırılabilir (ps -o pid, ruser = RealUser -o comm = Command). Tüm sütun başlıkları boşsa (ps -o pid = -o comm =), o zaman başlık satırı çıkmaz. Geniş başlıklar için sütun genişliği gerektiği gibi artacaktır; bu WCHAN (ps -o pid, wchan = WIDE-WCHAN-COLUMN -o comm) gibi sütunları genişletmek için kullanılabilir. Açık genişlik kontrolü (ps opid, wchan: 42, cmd) de sunulmaktadır. Ps -o pid = X, comm = Y'nin davranışı kişiliğe göre değişir; çıktı "X, comm = Y" adlı bir sütun veya "X" ve "Y" adlı iki sütun olabilir. Şüphe duyduğunuzda çoklu -o seçeneklerini kullanın. İstediğiniz bir varsayılanı belirtmek için PS_FORMAT ortam değişkenini kullanın; DefSysV ve DefBSD, varsayılan UNIX veya BSD sütunlarını seçmek için kullanılabilen makrolardır.

Yani istediğiniz komut (Ubuntu):

ps -o uid,pid,cmd -ef|grep python

OpenSolaris altında komut:

ps -o ruser,pid,comm -ef|grep python

3
Bu sizin için gerçekten işe yarıyor mu? Bu komutu çalıştırdığımdaWarning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
Bentley4

Evet, OpenSolaris altında ksh'ta benim için çalışıyor. Çıktı istediğiniz gibi ... Sisteminizde ps için man sayfalarına bakın man ps. Belki de sözdizimi sisteminizde biraz farklıdır.
Simon

1
Ama OP bash üzerinde ve ksh değil
pratnala

1
@ Bentley4 Sadece komutu istiyorsanız ve ek bilgiye ihtiyacınız yoksa -f argümanını bırakabilir ve aşağıdaki komutu kullanabilirsiniz:ps -o uid,pid,cmd -e|grep python
Simon

1
@ Bentley4:ps -o user,pid,cmd -e|grep '[p]ython'
Simon

3

En basit olanı muhtemelen:

$ ps o uid=,pid=,cmd= -C python
1000 26126 python

Böylece her şeyi doğrudan alırsınız psve hiçbir şeyi ayrıştırmanıza gerek kalmaz.

Gönderen psadam sayfası:

-o biçim

Kullanıcı tanımlı biçim. biçim, ayrı ayrı çıkış sütunlarını belirtmenin bir yolunu sunan boş ayrılmış veya virgülle ayrılmış liste biçimindeki tek bir bağımsız değişkendir. [...] Üstbilgiler istenildiği gibi yeniden adlandırılabilir (ps -o pid, ruser = RealUser -o comm = Command). Tüm sütun başlıkları boşsa (ps -o pid = -o comm =), o zaman başlık satırı çıkmaz.

-C cmdlist
     Select by command name.  This selects the processes whose executable 
     name is given in cmdlist.

Bu -Cseçenek pythonetkileşimli olarak çalışıyorsanız , python bir komut dosyası çalıştırıyorsa çalışmaz. Bu durumda kullanmalısınız -C scriptname.py.


1

PS sürümüm farklı, bu yüzden biraz ince ayar gerektirebilir, ancak cut (ve muhtemelen elde etmeye çalıştığınız şeye bağlı olarak tr) kullanabilirsiniz - örneğin,

ps ef | kes -c1-16,50-   

Ps ifadenizin her satırından 1-16 ve 50 karakterleri sağlar. (Gerçek sayılarınızın muhtemelen biraz masaj yapması gerekecektir).

Bunu yapmanın başka bir yolu (ancak biçimlendirmeyi kaybedersiniz)

ps ef | tr -s "" | kes -f1,2,8- -d ""

Bu, ps komutundaki boşlukları sıkıştıracak, sonra 1,2 ve 8 alanlarını alacak ve görüntüleyecektir.


Sadece bir işlem için bu komutlarla tam ekranda yarım sayfa bilgi alıyorum. Oldukça okunamıyor, parametrelere 'masaj yapıyorum' ama şimdiye kadar istediğim kadar uzaktan hiçbir şey alamadım.
Bentley4

1
ps -eo user,pid,cmd | grep [p]ython

Misal:

$ ps -eo user,pid,cmd | grep [p]ython
root      1056 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root      1735 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
bmaupin  16613 /usr/bin/python3 /usr/share/system-config-printer/applet.py

Açıklama:

  • -e tüm süreçler
  • -o kullanıcı tanımlı format
  • user,pid,cmd Kullanıcıyı, işlem kimliğini, komut sütunlarını göster

Not: Eğer kullanırsanız -file -ediğerleri önerdiğiniz gibi hatalarla alabilirsiniz. Bunun nedeni, bu parametrelerin her ikisinin de çıktı biçimini kontrol etmesidir ve bunlardan yalnızca biri kullanılmalıdır:

$ ps --help | grep -A 2 "output format"
*********** output format **********
-o,o user-defined  -f full
-j,j job control   s  signal
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.