web-dev-qa-db-ja.com

「ps aux」コマンドから常にPIDをカットする方法は?

プロセスからpidを取得したいのですが。私はps aux | cut -d ' ' -f 2を行いますが、pidを取得する場合と取得しない場合があります。

[user@ip ~]$ ps aux 
user  2049  0.5 10.4 6059216 1623520 ?     Sl   date   8:48 process 
user 12290  0.3  6.9 5881568 1086244 ?     Sl   date  2:30 
[user@ip ~]$ ps aux | cut -d ' ' -f 2 

12290
[user@ip ~]$ ps aux |  cut -d ' ' -f 3
2049

最初のcutコマンドが2にパイプしているのに対し、2番目のコマンドは3にパイプしていることに注意してください。使用する番号(2または3)を知らなくても、これらからPIDを選択するにはどうすればよいですか?

誰かが私にこれらの違いを教えてください、なぜそれが一方を拾い、もう一方を拾わないのですか?

9
Hunle

-d ' 'は、単一のスペースを区切り文字として使用することを意味します。 2049の前に1つのスペースと12290の前に2つのスペースがあるため、コマンドは-f 2-f 3でそれらを取得します。

これらのPIDを取得するには、ps aux | awk '{print $2}'を使用することをお勧めします。

または、trを使用して、最初にそれらのスペースを絞り込みますps aux | tr -s ' ' | cut -d ' ' -f 2

10
CtheSky

オプション-oを使用して、pidのみを出力できます。

ps -u user -o pid
3