gpt4 book ai didi

linux - Bash:内联执行返回 Duplicate "Process"。为什么?

转载 作者:IT王子 更新时间:2023-10-29 01:20:48 25 4
gpt4 key购买 nike

bash: 4.3.42(1)-release (x86_64-pc-linux-gnu)

执行以下脚本:

# This is myscript.sh
line=$(ps aux | grep [m]yscript) # A => returns two duplicates processes (why?)
echo "'$line'"
ps aux | grep [m]yscript # B => returns only one

输出:

'tom   31836  0.0  0.0  17656  3132 pts/25   S+   10:33   0:00 bash myscript.sh
tom 31837 0.0 0.0 17660 1736 pts/25 S+ 10:33 0:00 bash myscript.sh'
tom 31836 0.0 0.0 17660 3428 pts/25 S+ 10:33 0:00 bash myscript.sh

为什么内联执行的ps-snippet(A)返回两行?

最佳答案

总结

这会创建一个子 shell,因此有两个进程在运行:

line=$(ps aux | grep [m]yscript) 

这不会创建子外壳。因此,myscript.sh 只有一个进程在运行:

ps aux | grep [m]yscript       

演示

让我们稍微修改一下脚本,将进程和子进程的 PID 保存在变量 line 中:

$ cat myscript.sh 
# This is myscript.sh
line=$(ps aux | grep [m]yscript; echo $$ $BASHPID)
echo "'$line'"
ps aux | grep [m]yscript

在 bash 脚本中,$$ 是脚本的 PID,在子 shell 中是不变的。相比之下,当进入子 shell 时,bash 会用子 shell 的 PID 更新 $BASHPID

这是输出:

$ bash myscript.sh 
'john1024 30226 0.0 0.0 13280 2884 pts/22 S+ 18:50 0:00 bash myscript.sh
john1024 30227 0.0 0.0 13284 1824 pts/22 S+ 18:50 0:00 bash myscript.sh
30226 30227'
john1024 30226 0.0 0.0 13284 3196 pts/22 S+ 18:50 0:00 bash myscript.sh

在这种情况下,30226 是主脚本上的 PID,30227 是运行 ps aux | 的子 shell 的 PID grep [m]yscript.

关于linux - Bash:内联执行返回 Duplicate "Process"。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37801681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com