【发布时间】:2020-06-06 03:35:35
【问题描述】:
我发现 ps 或 pgrep 找不到没有“#!/bin/bash”的运行脚本
这是一个sample.sh:
while true
do
echo $(date)
done
启动脚本(ubuntu 18.04,Linux 版本 4.15.0-101-generic):
$echo $BASH
/bin/bash
./sample.sh
打开另一个终端,ps只找到命令grep
$ps -aux |grep sample.sh
16887 0.0 0.0 16184 1008 pts/4 S+ 07:12 0:00 grep --color=auto sample
pgrep 什么也没找到
$pgrep sample
$
但如果我在 sample.sh 中添加“#!/bin/bash”,现在一切正常:
#!/bin/bash <-----add this line
while true
do
echo $(date)
done
我想知道为什么。
【问题讨论】:
-
我想这取决于您拥有的 bash 版本,因为无论使用 bash 5.0.11,我都无法获得
sample.sh的 PID。但是如果我把printf 'boogaloo' > /proc/self/comm放在sample.sh的第一行,我可以通过pgrep boogaloo得到它的PID。 -
@camino :一个区别当然是没有#!行,脚本将由
sh运行,但这仍然不能解释我的区别。如果您通过sh sample.sh显式启动脚本,与bash sample.sh相比,会发生什么情况? -
@user1934428 sh sample.sh,ps aux|grep sample.sh 有效。