web-dev-qa-db-ja.com

実行中のすべてのプロセスIDのみを取得する方法は?

そんなこと知ってる

ps ax

pIDを返します

1 ?        Ss     0:01 /sbin/init
2 ?        S<     0:00 [kthreadd]
3 ?        S<     0:00 [migration/0]

必要なのはこれらの文字列をクリーンアップすることだけですが、適切な正規表現を記述できなかったため、sedでそれを実行できませんでした。私たちを手伝ってくれますか?

8
Jader Dias

ps出力フォーマットを使用:

ps -A -o pid

コマンドの出力フォーマットが最良のオプションです。 oオプションは、出力フォーマットを制御します。以下にいくつかの引数をリストしました。残りについては「man ps」を参照してください(複数を使用するには-o pid,cmd,flags)。

KEY   LONG         DESCRIPTION
   c     cmd          simple name of executable
   C     pcpu         cpu utilization
   f     flags        flags as in long format F field
   g     pgrp         process group ID
   G     tpgid        controlling tty process group ID
   j     cutime       cumulative user time
   J     cstime       cumulative system time
   k     utime        user time
   o     session      session ID
   p     pid          process ID

AwkまたはCutは列を取得するのに適しています:
通常、最初の列を選択するための正規表現は不要です。パイプでパイプを切り取り、awkで最初の列を切り取ります。

ps ax | awk '{print $1}'

Regexは最適ではない場合のオプションです:
正規表現を使用する場合、次のようなものになります。

ps ax | Perl -nle 'print $1 if /^ *([0-9]+)/'

$ 1は、括弧で一致したものだけを出力します。 ^は行の先頭にアンカーします。スペースアスタリスクは、数字の前にオプションのスペース文字を許可することを意味します。 [0-9] +は1桁以上の数字を意味します。しかし、私はこの特定のタスクに正規表現をお勧めしません、なぜですか? :-)

19
Kyle Brandt
ps ax | awk '{ print $1; }'
6
Chad Huneycutt

-oスイッチを使用して、cust形式の出力を取得します

ps -o pid

あなたが明示的に尋ねたように、sedを使用する悪い方法は

ps -ax | sed 's#^\( *[0-9]\+\) .*$#\1#'
5
drAlberT

ps -eo pidまたはps -eo%p

-eすべてのプロセスを選択-o形式pid =プロセスID%pと同じpid

0
Jesus Arechiga