181

Bash に問題がありますが、その理由がわかりません。
シェルの下で、次のように入力します。

echo $$    ## print 2433
(echo $$)  ## also print 2433
(./getpid) ## print 2602

「getpid」は、次のような現在の pid を取得する C プログラムです。

   int main() {
    printf("%d", (int)getpid());
    return 0;
   }

私を混乱させるのは、次のことです。

  1. 「(コマンド)」はサブプロセスだと思います(そうですか?)、そのpidは親pidとは異なるはずですが、同じです。なぜ...
  2. プログラムを使用して括弧の間に pid を表示すると、表示される pid が異なります。正しいですか?
  3. 「$$」はマクロのようなものですか?

手伝って頂けますか?

4

7 に答える 7

85

次のいずれかを使用できます。

  • $!最後にバックグラウンド処理されたプロセスの PID です。
  • kill -0 $PIDまだ実行されているかどうかを確認します。
  • $$現在のシェルの PID です。
于 2014-08-18T10:43:25.953 に答える
27
  1. 括弧は Bash でサブシェルを呼び出します。これは単なるサブシェルであるため、同じ PID を持つ可能性があります - 実装によって異なります。
  2. 呼び出す C プログラムは、独自の一意の PID を持つ別のプロセスです。サブシェルにあるかどうかは関係ありません。
  3. $$現在のスクリプト PIDへの Bash のエイリアスです。hereの違いを$$$BASHPID参照してください。そのすぐ上$BASH_SUBSHELLには、ネスト レベルを含む追加の変数があります。
于 2014-01-11T15:02:21.527 に答える