我需要在可执行生命周期内跟踪进程状态ps axf
。
假设我有可执行文件main.exec,并希望在main.exec执行期间调用所有子进程存储到文件中。
$ main.exec &
$ echo $! # and redirect every ps change for PID $! in a file.
答案 0 :(得分:2)
strace - 跟踪系统调用和信号
$ main.exec &
$ strace -f -p $! -o child.txt
-f Trace child processes as they are created by currently traced processes as a result of the fork(2), vfork(2) and clone(2) system calls. Note that -p PID -f will attach all threads of process PID if it is multi-threaded, not only thread with thread_id = PID.
答案 1 :(得分:1)
如果您无法重新编译并检测main.exec,则循环中的ps
是一个可能对您有用的简单选项:
while true; do ps --ppid=<pid> --pid=<pid> -o pid,ppid,%cpu,... >> mytrace.txt; sleep 0.2; done
然后相应地解析输出。
top
也可以运行,并且可以在批处理模式下运行,但不确定是否可以让它动态监控子进程,如ps
。别这么认为。