syntax = "proto2"; package uproctrace; message timespec { required int64 sec = 1; optional int32 nsec = 2; } message stringlist { repeated string s = 1; } message proc_begin { required int32 pid = 1; optional int32 ppid = 2; ///< pid of parent process optional string exe = 3; ///< path to executable optional string cwd = 4; ///< working directory optional stringlist cmdline = 5; ///< command line optional stringlist environ = 6; ///< environment variables } message proc_end { required int32 pid = 1; optional int32 ppid = 12; ///< pid of parent process (important for fork(), ///< because child of fork has no proc_begin event) /// fields from clock_gettime //@{ optional timespec cpu_time = 2; ///< CPU time usage //@} /// fields from getrusage //@{ optional timespec user_time = 3; ///< CPU time spent in user space optional timespec sys_time = 4; ///< CPU spent in kernel space optional int64 max_rss_kb = 5; ///< maximum resisent set size in KiB optional int64 min_flt = 6; ///< minor page fault count (i.e. no I/O) optional int64 maj_flt = 7; ///< major page fault count (i.e. I/O needed) optional int64 in_block = 8; ///< number of input operations on file system optional int64 ou_block = 9; ///< number of output operations on file system optional int64 n_v_csw = 10; ///< number of voluntary context switches optional int64 n_iv_csw = 11; ///< number of involuntary context switches //@} } message event { required timespec timestamp = 1; optional proc_begin proc_begin = 2; optional proc_end proc_end = 3; }