有时进程的启动和结束速度比我能做到的要快ps aux
,我试过了watch -d -n0.1 "ps aux | tail"
,但还是被限制在 1/10 秒。我真正想要的是运行一个命令并跟踪所有新进程,每行一个,因为它们会产生。即使是运行速度很快的进程。我知道strace
有类似的功能,但我无法让它做我想做的事。
tl;dr
:有没有办法记录所有新进程?
我不想知道太多,一行代码就够了ps aux
,就目前的情况来说,我只有一个进程,它由另一个进程产生,然后消失了,我想能够运行它,但我不知道命令是什么。即使知道新的 PID 也足够了,因为我可以想出一个脚本,它可以获取这些 PID 并在ps | grep
这些 PID 上运行,并在进程运行时给我更多信息(假设进程在ps
运行时仍然存在)
答案1
您想了解这些进程的哪些信息?如果您可以控制谁生成这些进程,strace -feprocess $SHELL
那就可以了。
如果只是对其足迹的概述,请使用进程记帐(在 gnu acct 包中;使用 lastcomm 命令),或更高级的工具,如 atop 的记录器模式。将来,像痕迹并且 uprobes 将有助于从内核中获取详细信息。
答案2
答案3
答案4
您应该使用lastcomm
,但由于我的内核不是使用进程记账构建的,我唯一的选择是top
找到一个永久唤醒我的 USB HDD 的进程。最后我找到了这个命令:
top -b -c -d 5 > /tmp/top.log
它top
每 5 秒执行一次 ( -d 5
),包含所有进程的完整列表 ( -b
) 和完整命令 ( -c
),并将其写入文件 /tmp/top.log ( >
)。
看到磁盘旋转后,我停止了记录,检查了当前时间范围内的所有输出,最后找到罪魁祸首。
top
允许-d 0
,其中“导致(几乎)持续更新“,但连续写入日志文件会产生巨大的负载,因此请注意。
如果您不想写入驱动器,您可以使用tmpfs
创建一个 ramdisk,这样日志文件就会写入 RAM。