Phi*_*ppe 17 shell bash process
我运行以下代码:
echo $$
# Output : 3911
true | while true; do
eval 'echo $$'
break
done
# Output : 3911
Run Code Online (Sandbox Code Playgroud)
文档说 while 循环(涉及管道)在子进程中运行,在这种情况下,两个进程 ID 是否应该不同?
Kus*_*nda 22
值$$
中bash
,如果你在一个子shell检查将保持不变,甚至。这种行为是POSIX 标准规定的:
$
扩展为调用的 shell 的十进制进程 ID。在子shell [...] 中,
$
应扩展到与当前shell 相同的值。
您可能应该$BASHPID
改用。以下内容来自bash
手册:
BASHPID
扩展到当前 bash 进程的进程 ID。 这与
$$
某些情况下不同,例如不需要重新初始化 bash 的子 shell。 赋值BASHPID
没有效果。如果BASHPID
未设置,它将失去其特殊属性,即使随后被重置。
重写您的代码以使用$BASHPID
:
printf '%s\n' "$BASHPID"
true | while true; do
printf '%s\n' "$BASHPID"
break
done
Run Code Online (Sandbox Code Playgroud)
运行它会输出两个不同的 PID。
归档时间: |
|
查看次数: |
624 次 |
最近记录: |