Portál AbcLinuxu, 10. května 2025 08:44
Řešení dotazu:
/proc/[pid]/stat
- to by SystemTap mohl taky umet, ale je to na delsi zkoumani.
Highlevel bych to videl takhle - v kprocess.exec_complete
si vyfiltrovat a zapamatovat potrebne procesy (vcetene casu startu); v kprocess.exit
zjistit zda konci zapamatovany proces, zjistit jeho utime
a vypsat ho spolecne s rozdilem od casu kprocess.exec_complete
- tim se pak da toho dost zjistit.process-files.stap:
global pids function get_usertime:long() %{ THIS->__retvalue = current->utime + current->signal->utime; %} function proc:string() { return sprintf("%d (%s)", pid(), execname()) } probe syscall.fork.return { printf("%s fork : %d\n", proc(), $return) } probe syscall.execve { printf("%s execve :%s\n",proc(), kernel_string($filename)) pids[pid()] = gettimeofday_ms() } probe syscall.exit { if (pids[pid()] != 0) { printf("%s exit : utime=%d rtime=%d\n", proc(), get_usertime(), gettimeofday_ms() - pids[pid()]) pids[pid()] = 0 } else { printf("%s exit : utime=%d rtime=unknown\n", proc(), get_usertime()) } }Spusteni:
stap process-files.stap -g
Priklad vystupu:
14 (kthread) fork : 7686 7686 (kstopmachine) exit : utime=0 rtime=unknown 14 (kthread) fork : 7687 7687 (kstopmachine) exit : utime=0 rtime=unknown 14 (kthread) fork : 7688 7688 (kstopmachine) exit : utime=0 rtime=unknown 7668 (bash) exit : utime=4919 rtime=unknown 6426 (bash) fork : 7689 7689 (bash) execve :/bin/cat 7689 (cat) exit : utime=0 rtime=1912 6426 (bash) fork : 7690 7690 (bash) execve :/bin/bash 7690 (bash) exit : utime=3680 rtime=3341 7680 (stapio) exit : utime=0 rtime=unknownKde
utime
je klasicky user time a rtime
je real-time (celkovy cas behu programu). Neni problem pridelat system-time. Procesy s rtime=unknown
byl spusteni pred zacatkem behu skriptu.cat
bezel 1912ms a spotreboval 0ms, tudiz prumerne vytezoval procesor na 0% po dobu 1912ms; bash
bezel 3341ms a spotreboval 3680ms, tudiz prumerne vytezoval procesor na 100% po dobu 3341ms (tady netusim proc rtime
< utime
, ale tech par ms pujde snad zanedbat)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.