そんなこと知ってる
ps ax
pIDを返します
1 ? Ss 0:01 /sbin/init
2 ? S< 0:00 [kthreadd]
3 ? S< 0:00 [migration/0]
必要なのはこれらの文字列をクリーンアップすることだけですが、適切な正規表現を記述できなかったため、sedでそれを実行できませんでした。私たちを手伝ってくれますか?
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桁以上の数字を意味します。しかし、私はこの特定のタスクに正規表現をお勧めしません、なぜですか? :-)
ps ax | awk '{ print $1; }'
-oスイッチを使用して、cust形式の出力を取得します
ps -o pid
あなたが明示的に尋ねたように、sedを使用する悪い方法は
ps -ax | sed 's#^\( *[0-9]\+\) .*$#\1#'
ps -eo pidまたはps -eo%p
-eすべてのプロセスを選択-o形式pid =プロセスID%pと同じpid