Process uptime in sec

Fórumok

Hi,

A címben szereplő dologra lenne szükségem. Egyenlőre nem találtam egyszerű megoldást a neten.

Tehát egy adott folyamat és PID alapján az uptime-ra vagyok kíváncsi másodpercben.

2 lehetőséget látok:
-----------------------------
(1)


$PID=`pgrep -o bash`
cat /proc/$PID/stat | cut -d " " -f 22

De ez jiffies-ben adja meg az értéket (a starttime-ét). Hogyan tudom másodpercre konvertálni?

(2)


$PID=`pgrep -o bash`
ps --no-headers -o etime -p "$PID"

De ez utóbbit meg nehéz sec-re konvertálni, mert ha 1 óránál kevesebb az uptime, akkor MM:SS formátumban mutatja, ha 1 óránál > nagyobb, akkor HH:MM:SS, és ha 1 napnál nagyobb, akkor DD-HH:MM:SS formátumban.

Egyszerűbb ötlet esetleg? Hogyan kell jiffies-t sec-re konvertálni?

Köszi.

Hozzászólások


my $hz = 100;
my $pid = $ARGV[0];
my $data;
open(FILE,"/proc/$pid/stat");
read(FILE,$data,1024);
close(FILE);
my @input = split(" ",$data);
my $x = $input[21];

open(FILE,"/proc/uptime");
read(FILE,$data,1024);
close(FILE);
my ($sec,$ms) = ($data =~ /^([0-9]+)\.([0-9]+) [0-9]+\.[0-9]+$/);
my $uptime = $sec*$hz+$ms;
my $runtime = $uptime-$x;
print $runtime/$hz;

Itt azt írják, hogy 1 jiffy = 4ms

--
Soli Deo Gloria

és akkor ebben a naiv pici bash scriptben:

PID=1; echo $(awk '{print $1}' /proc/uptime) - "(" $(cat /proc/$PID/stat | cut -d " " -f 22) / 100 ")" | bc | cut -d "." -f1

hol a hiba?

ja, hogy már írtál róla blogbejegyzést, ok, akkor ugyan az, komment nélkül :D

#!/bin/bash
if [ "$1" == "" ]; then echo "no process name given!"; exit 1; fi
PID=$(pgrep -o $1)
echo $(awk '{print $1}' /proc/uptime) - "(" $(cat /proc/$PID/stat | cut -d " " -f 22) / 100 ")" | bc | cut -d "." -f1

köszi