1. ホーム
  2. bash

[解決済み] なぜ$$は親プロセスと同じidを返すのですか?

2022-04-20 14:26:15

質問

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. はマクロのようなものですか?

助けてもらえますか?

解決方法を教えてください。

$$ は、サブシェル内の親のプロセス ID を返すように定義されています。マニュアルページの "Special Parameters" を参照してください。

シェルのプロセスIDに展開されます。 ()サブシェルでは、サブシェルではなく、現在のシェルのプロセスIDに展開されます。

bash 4で、子のプロセスIDを取得することができます。 BASHPID .

~ $ echo $$
17601
~ $ ( echo $$; echo $BASHPID )
17601
17634