execsnoop은 새로운 프로세스 실행을 시스템 전역에 걸쳐 트레이싱하는 BCC, bpftrace도구이다.
#!/usr/bin/bpftrace
BEGIN
{
printf("%-10s %-5s %s\n", "TIME(ms)", "PID", "ARGS");
}
tracepoint:syscalls:sys_enter_execve
{
printf("%-10u %-5d ", elapsed / 1000000, pid);
join(args->argv);
}
- 누가 해당 프로세스를 생성했는지
- 해당 시간이 어떻게 되는지
BEGIN
{
printf("%-25s %-5s %s %s\n","TIME", "PID", "USERNAME", "ARGS");
}
Username
Time
elapsed : bpftrace가 초기화된 후 nanoseconds
nsecs : timestamp (bpf_ktime_get_ns()으로 수집)
두 변수 모두 RealTime을 알수없음
내장함수인 time을 이용
but 해당 함수는 bpf가 time을 호출한 시점이 아닌 이벤트 즉 process 생성한 시간이다.
tracepoint:syscalls:sys_enter_execve
{
time("%F %H:%M:%S ");
printf("%-6d %-10s", pid, username);
join(args->argv);
}
Code
#!/usr/bin/bpftrace
BEGIN
{
printf("%-25s %-5s %s %s\n","TIME", "PID", "USERNAME", "ARGS");
}
tracepoint:syscalls:sys_enter_execve
{
time("%F %H:%M:%S ");
printf("%-6d %-10s", pid, username);
join(args->argv);
}
Result