特定のプロセスで実行されるユーザー、pid、コマンドのみを取得する方法は?(Ubuntu 11.10)


19

私がするとき、私は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

代わりに次の出力のように、プロセスを実行しているユーザーpid、およびプロセスコマンドのみを取得するにはどうすればよいですか?

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

これは機能しますか?ps --fields="user pid command"
pratnala

試しませんでした。ネットで見つけました。現在はUbuntuマシンの近くではありません。ごめんなさい。後で表示され、お知らせします
pratnala

いいえ、ERROR:Unknown gnu long optionが表示されます。それはあなたのために働きますか?
ベントレー4

回答:


13

-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

3
それは実際にあなたのために働きますか?そのコマンドを実行すると、次のようになりますWarning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
-Bentley4

はい、OpenSolarisのkshで動作します。出力は希望どおりです...システムのpsのmanページを確認してくださいman ps。システムによって構文が少し異なる場合があります。
サイモン

1
しかし、OPはkshではなくbashにあります
-pratnala

1
Bentley4 @あなただけのコマンドをしたいし、追加情報を必要としない場合は、-f引数を削除し、次のコマンドを使用することができますps -o uid,pid,cmd -e|grep python
サイモン・

1
@ Bentley4:ps -o user,pid,cmd -e|grep '[p]ython'
サイモン

3

最も簡単な方法はおそらく次のとおりです。

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

そうすれば、すべてを直接取得でき、ps何も解析する必要はありません。

psmanページから:

-o format

ユーザー定義の形式。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代わりに使用する必要があります。


1

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

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

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

それを行う別の方法(ただし、フォーマットを緩めます)は

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

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


1つのプロセスについてのみ、これらのコマンドを使用して、全画面で半ページの情報を取得します。それはかなり読みにくいです、私はパラメータを「マッサージ」していますが、これまでのところ私は望んでいるものをリモートで取得することができませんでした。
ベントレー4

1
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、コマンド列を表示する

注:他のユーザーが提案したように-fwith を使用すると-e、エラーが発生する場合があります。これは、これらのパラメーターの両方が出力形式を制御し、そのうちの1つのみを使用する必要があるためです。

$ ps --help | grep -A 2 "output format"
*********** output format **********
-o,o user-defined  -f full
-j,j job control   s  signal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.