![寻找便捷的方法来查找运行当前脚本的CPU数量](https://linux22.com/image/118868/%E5%AF%BB%E6%89%BE%E4%BE%BF%E6%8D%B7%E7%9A%84%E6%96%B9%E6%B3%95%E6%9D%A5%E6%9F%A5%E6%89%BE%E8%BF%90%E8%A1%8C%E5%BD%93%E5%89%8D%E8%84%9A%E6%9C%AC%E7%9A%84CPU%E6%95%B0%E9%87%8F.png)
我想实现一个简单的演示脚本,打印主机名称和运行该脚本的 CPU 数量。
hostname -s
负责输出的第一部分。有没有类似方便的方法来获取CPU编号?
(据我所知,一般来说,一个进程可能包含多个线程,这些线程可能在多个CPU上运行。但是,在这里,我假设脚本在单个线程上运行。)
答案1
这与上面 Jesse_b 的解决方案类似,但使用其 pid 请求脚本的信息:
#!/bin/bash
host=$(hostname -s)
processor=$(ps -hp $$ -o psr)
echo "Script running on ${host} on processor ${processor}"
该-h
选项抑制标头,该-p $$
选项选择具有给定 pid 的进程,并且$$
是正在运行的脚本的 pid,该-o psr
选项仅选择 psr 字段 – 该进程当前分配到的处理器。
答案2
我相信这就是您正在寻找的,尽管该脚本通常在多个线程上运行。我相信这也不会非常准确,因为脚本创建了一个进程组。这是搜索,ppid
脚本中的许多命令将pid
在该进程组中创建自己的命令。因此,任何已完成并关闭的命令,或该ps -aF
行之后启动的任何进程都不会被捕获。
#!/bin/bash
hostname -s
echo -e "Proccess:\t$(pgrep "$(basename $0)")"
echo -e "$(ps -aF | grep "$(pgrep $(basename $0))" | awk '{print "CPU:\t\t"$7}')"