whileループのPIDを見つける方法は?

whileループのPIDを見つける方法は?

Bash 端末でこのコマンドを実行します。

  while [ 0 ]; do 
    i=1; 
    echo $i; 
  done

このループを実行する前に、gnome-terminalの別のタブで次のことを行いました。

$ps aux | wc -l
192

ループの実行中に再実行しました。

$ps aux | wc -l
192

私の質問 -

  1. whileループがPIDを取得できないのはなぜですか?

  2. whileループ内で実行される各コマンドのPIDを取得するには?

ベストアンサー1

  1. while外部コマンドではなくシェルキーワードなので、独自のPIDを取得できません。 PIDがプロセスとして一覧表示されますbash。 PIDを取得するには、echo $$内部whileループを挿入してps aux | grep '[b]ash'PIDを一致させるために使用します。

  2. コマンドがシェル組み込みでない場合は、たとえば、を使用して一般的な方法でPIDを取得できますpspgrepPPID(親プロセスID)フィールドには、通常実行中のシェルのPIDが表示されます。

    例えば。foobarシェルループ内のコマンドの詳細を取得するには、次のようにします。

    ps -ef | grep '[f]oobar'
    

    または

    ps aux | grep '[f]oobar'
    

    またはpgrep:

    pgrep 'foobar'
    

    複数のシェルプロセスが実行されるため、詳細を考慮し、PPIDフィールドがシェルPIDと一致することを確認する必要があります。

    ループを実行する場合、プロセステーブル内のプロセスの可用性は、そのプロセスが実行された期間とプロセステーブルを確認するタイミングによって異なります。

おすすめ記事