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.
- 1052 megtekintés
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;
- A hozzászóláshoz be kell jelentkezni
tehát uptime - starttime, csak ugye a /proc/uptime másodpercben van, ezért konvertálod ugye? ha jól látom
köszi
- A hozzászóláshoz be kell jelentkezni
Itt azt írják, hogy 1 jiffy = 4ms
--
Soli Deo Gloria
- A hozzászóláshoz be kell jelentkezni
köszi, erre volt szükségem
- A hozzászóláshoz be kell jelentkezni
kipróbáltam, de érdekes módon nem 4 ms, hanem 10 ms a rendszeremen (habár ezt írják is a wiki oldalon) :)
Debian 5.0 Linux 2.6.26-2-amd64 #1 SMP Sun Jun 21 04:47:08 UTC 2009 x86_64 GNU/Linux
- A hozzászóláshoz be kell jelentkezni
é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?
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
ha előbb írod, akkor nem fáradok a bloggal :)
- A hozzászóláshoz be kell jelentkezni