web-dev-qa-db-ja.com

特定のプロセスに対して実行されたユーザー、pid、およびコマンドのみを取得する方法は? (Ubuntu 11.10)

私がする時 ps -ef|grep python以下を取得します。

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

次の出力のように、プロセスを実行しているserpid、およびcommandのプロセスのみを取得するにはどうすればよいですか?

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

私はあなたが-o引数を探していると思います:

-o形式:

ユーザー定義のフォーマット。 formatは、空白で区切られたリストまたはカンマで区切られたリストの形式の単一の引数であり、個々の出力列を指定する方法を提供します。認識されるキーワードは、以下の「標準形式の指定子」セクションで説明されています。ヘッダーは必要に応じて名前を変更できます(ps -o pid、ruser = RealUser -o comm = Command)。すべての列ヘッダーが空の場合(ps -o pid = -o comm =)、ヘッダー行は出力されません。幅の広いヘッダーの場合、列幅は必要に応じて増加します。これは、WCHAN(ps -o pid、wchan = WIDE-WCHAN-COLUMN -o comm)などの列を広げるために使用できます。明示的な幅制御(ps opid、wchan:42、cmd)も提供されています。 ps -o pid = X、comm = Yの動作は、性格によって異なります。出力は、「X、comm = Y」という名前の1つの列、または「X」と「Y」という名前の2つの列です。疑わしい場合は、複数の-oオプションを使用してください。 PS_FORMAT環境変数を使用して、必要に応じてデフォルトを指定します。 DefSysVおよびDefBSDは、デフォルトのUNIXまたはBSD列を選択するために使用できるマクロです。

だからあなたが望むコマンドは(Ubuntu)です:

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

openSolarisでのコマンドは次のとおりです。

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

最も単純なものはおそらく次のようになります。

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

そうすれば、psから直接すべてを取得し、何も解析する必要がなくなります。

ps manページから:

-oフォーマット

ユーザー定義のフォーマット。 formatは、空白で区切られたリストまたはカンマで区切られたリストの形式の単一の引数であり、個々の出力列を指定する方法を提供します。 [...]ヘッダーは必要に応じて名前を変更できます(ps -o pid、ruser = RealUser -o comm = Command)。 すべての列ヘッダーが空の場合(ps -o pid = -o comm =)、ヘッダー行は出力されません。

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

-Cオプションは、インタラクティブにpythonを実行している場合は機能しますが、pythonがスクリプトを実行している場合は機能しません。その場合は-C scriptname.py代わりに。

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

例:

$ 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

説明:

  • -eすべてのプロセス
  • -oユーザー定義フォーマット
  • user,pid,cmdユーザー、プロセスID、コマンド列を表示

注:-f-eとともに使用すると、他の人が示唆しているように、エラーが発生する可能性があります。これは、これらのパラメーターの両方が出力形式を制御するためであり、それらの1つだけを使用する必要があります。

$ ps --help | grep -A 2 "output format"
*********** output format **********
-o,o user-defined  -f full
-j,j job control   s  signal
1
bmaupin

PSのバージョンが異なるため、多少の調整が必要になる場合がありますが、カット(および達成しようとしていることに応じてtr)を使用できます-たとえば、

 ps ef |カット-c1-16,50- 

Psステートメントの各行から1〜16および50以降の文字を提供します。 (あなたの実際の数はおそらく少しマッサージする必要があります)。

これを行う別の方法(ただし、書式設定が失われます)は、

ps ef | tr -s "" |カット-f1,2,8- -d "" 

これは、psコマンドで空白を圧縮し、フィールド1、2、8以降を取得して表示します。

1
davidgo