Bash 脚本文件名未出现在正在运行的进程列表中

Bash 脚本文件名未出现在正在运行的进程列表中

我最近买了一台 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读取命令文本文件的实例。这就是为什么它们都显示bashps

该解决方案在一定程度上取决于您实际启动各种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 执行)

然后就会以这个名字出现。

相关内容