Bashに問題があり、その理由がわかりません。
シェルの下で、次のように入力します。
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
「getpid」は、次のように現在のpidを取得するCプログラムです。
int main() { printf("%d", (int)getpid()); return 0; }
私を混乱させるのはそれです:
- 「(コマンド)」はサブプロセスだと思います(正しいですか?)
- プログラムを使用して括弧内のpidを表示すると、表示されるpidが異なりますか?
- 「$$」はマクロのようなものですか?
手伝って頂けますか?
@Marian
—
ベン
echo $$ $BASHPID ; ( echo $$ $BASHPID )
は、そのことを示しています。丸括弧はサブシェルを作成します。ステートメントは変数値を変更する可能性があり、親シェルはそれらの変更を認識してはなりません。これはfork()
操作として実装されます。
getpid
サブシェルで実行されていなくても、別のプロセスIDが表示されることに注意してください。