2016-10-05 4 views
1

は、私はちょうど私がなぜ我々は場合、これは、チェックインし、それが何をやっている持っている必要があります知っている可能性がある場合 バッシュプロセスIDクエリ

for x in `ps -ef | awk '{ print $2 }'` 
    do 
     if [ "$x" != "PID" ];then 
     ----- do something ----- 
     fi 
    done 

ようにチェックして、コードを見ましたか?

+0

'for'ループへの入力を生成するコマンドを実行しましたか? –

+0

'awk'文を' ps -ef | 'に少し修正して' if condition'を削除することができます。 awk 'NR> 1 {print $ 2}' 'となります。これはヘッダーをスキップします。 –

+0

あるいは、あなたが捨てる情報を印刷するために '-f'を使う代わりに、' for $ in ps(ps -e -o pid =);を実行してください。 do ... ... –

答えて

1

あなたがps -efを実行する場合、あなたはそれがヘッダーを印刷することが、わかります。

 UID  PID PPID TTY  STIME COMMAND 
[...] 

チェックは、ヘッダーをスキップします。

1

ps -ef | awk '{ print $2 }' 'は以下のように出力されます。最初の行はPIDなので、statetementが使用されている場合はPID行を除外します。

[email protected]:/tmp$ ps -ef | awk '{ print $2 }' | head 
PID 
1 
2 
3 
5 
7 
8 
9 
10 

これを使用することもできます。

#!/bin/bash 
for x in `ps -ef | awk '{ print $2 }' | grep -v PID` 
do 
    #----- do something ----- 
    echo $x 
done 
2

ヘッダー部分をスキップするためのチェックが追加されました。 awkステートメントを変更して最初の行をスキップして、if文全体を削除することができます。どのヘッダが実行されているか調べるにはps -eaf |head -n 1

for x in $(ps -ef | awk 'NR>1{ print $2 }') 
    do 
      --------Do something with $x--------- 
    done 
+0

その他の情報: 'ps'の実装には、ヘッダの記述を省略するフラグがあります - マニュアルページを参照してください。これは移植性を犠牲にしても、スクリプトを単純化することができます。 –

関連する問題