我最近买了一台 Raspberry Pi 3 来学习 Linux 并探索单板计算机的世界。我正在其上运行最新版本的 Raspbian(不确定是哪个)。
观看了一些教程视频后,我决定探索 CPU 压力测试并观察报告的温度。我选择的方法是创建两个 bash 文件:infinite_loop.bash 和 cpu_spike.bash。
Infinite_loop.bash 包含一个无限 while 循环,它执行一些大型指数计算。 cpu_spike.bash 调用infinite_loop.bash 在 Pi 的 4 个核心上运行,此脚本还在所需的持续时间内每 5 秒显示一次 Pi 的报告温度。这些脚本工作正常(导致所有核心达到 100% 并产生观察到的温度升高),但有一个方面无法正常工作,即试图在 cpu_spike.bash 脚本末尾终止Infinite_loop.bash 进程!
ps -A
返回每个进程名称都列为“bash”,而不是“infinite_loop.bash”或“infinite_loop”或任何可识别的名称。所以在我遵循的示例代码中,我不能有cpu_spike 脚本末尾的以下行:
killall infinite_loop.bash
命令行返回'infinite_loop.bash'进程未找到
所以,因为我看到每个无限循环进程在运行进程列表中都被称为“bash”,所以我正在使用
killall bash
在测试结束时。这样做不好吗?为什么我的无限循环进程没有被称为类似于脚本名称的任何名称?
请参阅下面我的 cpu_spike.bash 原始代码:
#!/bin/bash
#get initial temp
vcgencmd measure_temp
for i in `seq 4` ; do
#put infinite loop on each cpu
/bin/bash /home/pi/infinite_loop.bash &
done
#report temp every 5 seconds for 60 seconds
for value in {1..12}
do
sleep 5s
vcgencmd measure_temp
done
killall bash
注意 - 我不确定为什么两个 for 循环的格式不同。顶部循环是我从网上看到的示例中获得的循环,第二个 for 循环是我从我看到的另一个示例中获得的代码。
答案1
请记住,shell 脚本只是文本文件,在您的情况下,由解释器解释bash
。因此,执行 bash 脚本的任何进程基本上都是bash
读取命令文本文件的实例。这就是为什么它们都显示bash
为ps
。
该解决方案在一定程度上取决于您实际启动各种infinite_loop.bash
脚本的方式。假设你做了类似的事情
infinite_loop.bash & # cpu 1
infinite_loop.bash & # cpu 2
infinite_loop.bash & # cpu 3
infinite_loop.bash & # cpu 4
最后你可以通过跑步杀死他们kill $(jobs -p)
。
答案2
您正在调用 bash 并将其作为参数提供Infinite_loop.bash 脚本进行解释。因此,正在运行的进程就是您所说的,即bash
要将进程命名为您的infinite_loop.bash
,请通过更改来编辑您的 launxhining 脚本:
/bin/bash /home/pi/infinite_loop.bash
进入 :
/home/pi/infinite_loop.bash
(确保这个有一个 shebang 第一行,就像你的脚本一样,以便它由 bash 执行)
然后就会以这个名字出现。