从这里的问题来看,OP 想要反复轮询pidof在 shell 脚本中使用的进程的 pid 。当然,这是低效的,因为必须pidof每秒多次为程序启动一个新进程(我不知道这是问题中 CPU 峰值的原因,但似乎很可能)。
通常在 shell 脚本中解决这种事情的方法是使用单个程序来输出您需要的数据stdout,然后在必要时进行一些文本处理。虽然这涉及更多的程序同时运行,但它可能会降低 CPU 密集度,因为不会为了轮询目的而不断创建新进程。
因此,对于上述问题,一种解决方案可能是让一些程序在创建进程时输出进程的名称和 pid。然后你可以做这样的事情:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
Run Code Online (Sandbox Code Playgroud)
这样做的问题是它提出了一个更基本的问题,如何在创建 pid 和进程名称时打印它们?
我找到了一个名为 的程序ps-watcher,尽管它的问题在于它只是一个perl重复运行的脚本,ps所以它并没有真正解决问题。另一种选择是使用auditd如果日志直接通过tail -f. 一个理想的解决方案会比这更简单、更便携,但auditd如果它是最好的选择,我会接受一个解决方案。
我想监视一个大日志文件(接近 1 GB)是否有错误。我希望这接近实时(几秒钟延迟很好)。我的计划是使用tail -f | grep. 在长时间运行时使用这种方法是否有任何性能问题,比如从零字节到 1 GB?是否有任何用于此类监控的标准做法。请注意,我想使用 Solaris 10 上可用的标准 unix 命令来执行此操作。
如果可能的话,我的文件甚至会翻转,我还有一个问题需要解决:)。使用tail -F( --follow=name) 对我来说不是一个选项,因为-F在我想要运行它的服务器中不支持。我的计划是使用一个脚本来启动这个尾部并轮询以查找文件是否被翻转。如果是,则杀死尾部并重新启动它。有什么更好的方法吗?
我想从 C 程序中读取 CPU 利用率统计信息,我对 CPU 使用率、窃取时间等感兴趣。这些统计信息显示在top命令的第三行。
我试图top用awk( top -n 1 -b | awk '{print $0}')解析's 的输出,但它似乎top在开始显示正确的统计数据之前总是给出相同的“虚构”值。
有没有办法从代码中,或者通过解析一些命令的输出来获取 CPU 利用率统计信息?
编辑:
平台为Linux
谢谢你。
是否有一个 linux 程序可以让您查看当前的下载流量?可以列出我当前连接和下载的所有地址的东西。
我想从终端获取接口的当前带宽,比如“eth0”。最好尽可能简单。说 10 dn 30。而不是像“vnstat”那样给出很多文本。
编辑:我需要这个用于自动监控的命令行程序,而不是手动查看它。
我在脚本中有一个名为 file1 的文件,每当它发生变化时,就做一些事情,实际上是发出哔哔声。我怎么做?
我想在外部进程关闭后立即移动它创建的大文件。
这个测试命令正确吗?
if lsof "/file/name"
then
# file is open, don't touch it!
else
if [ 1 -eq $? ]
then
# file is closed
mv /file/name /other/file/name
else
# lsof failed for some other reason
fi
fi
Run Code Online (Sandbox Code Playgroud)
编辑:该文件代表一个数据集,我必须等到它完成才能移动它,以便另一个程序可以对其进行操作。这就是为什么我需要知道外部进程是否完成了文件。
一旦我的树莓派连接到互联网,我就需要执行一个脚本。但是我想知道是否有比每分钟左右 ping Google 更好的方法。
我的问题是我的 Internet 连接在白天断开了 1-2 次,因此我需要一种方法来记录此类事件。
这只是白天的 ADSL 掉线,我一直在寻找某种方式来记录它何时发生,即使我没有注意到。我想我会按照建议设置一个脚本。
我不明白为什么 cpu 列中 % 的总和top与总 CPU % 行不匹配:
值略有不同的文本版本:
ubuntu@server:~$ top
top - 23:20:21 up 5:18, 3 users, load average: 10.28, 10.36, 10.20
Tasks: 299 total, 11 running, 288 sleeping, 0 stopped, 0 zombie
%Cpu(s): 41.7 us, 0.0 sy, 0.0 ni, 58.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 99007376 total, 83451488 used, 15555892 free, 36212 buffers
KiB Swap: 0 total, 0 used, 0 free. 5139148 cached Mem
PID USER PR NI VIRT RES …Run Code Online (Sandbox Code Playgroud) 是否有工具或命令可以帮助捕获特定进程(PID)的带宽消耗,就像系统监视器一样,但对于单个特定进程,如下面的屏幕截图所示 
我会对至少将此类历史记录导出到文件的命令行工具感到满意。(我在 Ubuntu 16.04 上)
更新 1
我至少想要一个像Nethogs这样可以输出到文件中的工具(Nethogs 只捕获 TCP 连接)一个针对 TCP 和 UDP 的类似工具会很棒
更新 2
任何脚本,其他工具(如wireshark)的组合也会有所帮助。
monitoring ×10
linux ×2
networking ×2
process ×2
shell-script ×2
top ×2
bandwidth ×1
bash ×1
c ×1
cpu ×1
cpu-usage ×1
download ×1
files ×1
internet ×1
ip ×1
logs ×1
lsof ×1
open-files ×1
ping ×1
tail ×1