私がする時 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
次の出力のように、プロセスを実行しているser、pid、およびcommandのプロセスのみを取得するにはどうすればよいですか?
myusername 4492 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root 6665 /usr/bin/python /usr/lib/system-service/system-service-d
私はあなたが-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
最も単純なものはおそらく次のようになります。
$ 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
代わりに。
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
PSのバージョンが異なるため、多少の調整が必要になる場合がありますが、カット(および達成しようとしていることに応じてtr)を使用できます-たとえば、
ps ef |カット-c1-16,50-
Psステートメントの各行から1〜16および50以降の文字を提供します。 (あなたの実際の数はおそらく少しマッサージする必要があります)。
これを行う別の方法(ただし、書式設定が失われます)は、
ps ef | tr -s "" |カット-f1,2,8- -d ""
これは、psコマンドで空白を圧縮し、フィールド1、2、8以降を取得して表示します。