这正是linux perf确实在Linux上,你可以使两个跟踪点,这将在进程启动和退出被称为:
# perf list
sched:sched_process_exec [Tracepoint event]
sched:sched_process_exit [Tracepoint event]
sched:sched_process_fork [Tracepoint event]
....
您可以通过使用debugfs使其与跟踪点玩:
cd /sys/kernel/debug/tracing
echo sched:sched_process_fork >> set_event
echo sched:sched_process_exit >> set_event
echo 1 > tracing_on
cat trace_pipe
你会得到的输出是这样的:
<...>-115924 [001] .... 1853164.915266: sched_process_fork: comm=bash pid=115924 child_comm=bash child_pid=115970
<...>-115970 [002] .... 1853164.915864: sched_process_exit: comm=bash pid=115970 prio=120
<...>-115924 [001] .... 1853164.916147: sched_process_fork: comm=bash pid=115924 child_comm=bash child_pid=115971
<...>-115971 [003] .... 1853164.916655: sched_process_exit: comm=bash pid=115971 prio=120
<...>-115924 [001] .... 1853165.502237: sched_process_fork: comm=bash pid=115924 child_comm=bash child_pid=115972
<...>-115972 [003] .... 1853165.503027: sched_process_exit: comm=cat pid=115972 prio=120
<...>-115924 [001] .... 1853176.627842: sched_process_fork: comm=bash pid=115924 child_comm=bash child_pid=115973
<...>-115973 [003] .... 1853176.628515: sched_process_exit: comm=cat pid=115973 prio=120
<...>-115924 [001] .... 1853184.520488: sched_process_fork: comm=bash pid=115924 child_comm=bash child_pid=115974
正如您所看到的,每当进程分叉或终止时,都会显示该事件。 trace_pipe
也是一个管道,这样你就可以等待并在程序中读取它。