Prozess Status

emha

Well-Known Member
Hallo Forum,

FreeBSD läuft hier auf einem sehr betagtem Rechner und wenn ich z.B. Firefox neu bauen will bremst es mein komplettes System aus (swap...)

Z.z. stoppe ich 'make' bzw. 'ld' mit 'kill -STOP xxxx' wenn ich relativ flüssig arbeiten will und lasse es anschließend mit 'kill -CONT xxxx' wieder weiter bauen.

Ich würde gern ein Script schreiben mit dem ein einfaches Umschalten möglich ist.
Etwa so:
ppause --stop build
Auslesen aller Prozesse (make, gmake, ld, etc.) und ein -STOP Signal senden.
ppause --cont build
Auslesen aller gestoppten Prozesse und diese mit 'kill -CONT' wieder anlaufen lassen.

Ersters klappt soweit mit 'pgrep', aber wie lese ich die gestoppten Prozese aus?

Gruß,
emha
 
Ersters klappt soweit mit 'pgrep', aber wie lese ich die gestoppten Prozese aus?

"ps" zeigt den Prozessstatus an, da kannst Du dir die PID's sicherlich rausfummeln.
Einfacher wäre jedoch sicherlich, dass dein Stop-Skript die PID's auf STDOUT rauswirft, die es mit "kill -STOP" bearbeitet.

Also in etwa so:
Code:
ppause --stop build > pids
ppause --cont build < pids
 
Hi unull,

mit 'ps' war ich wenig erfolgreich. 'top -b | grep STOP' ist zur Zeit mein Ansatz.
 
Hi unull,

mit 'ps' war ich wenig erfolgreich. 'top -b | grep STOP' ist zur Zeit mein Ansatz.

Code:
ps ax -o pid,stat  | grep 'Ts' | cut -d " " -f 2

Das geht hier z.B. Aber wie schon gesagt, die PID's hast Du sowieso schon beim Stoppen rausgesucht. Ich würde einfach diese dann wiederverwenden.
 
Hi nuull,

'ps ax -o pid,stat | grep 'Ts' | cut -d " " -f 2'

zeigt werder unter meinem Benutzer noch unter Root ein Ergebnis...

Lass mir hier bitte Zeit bis morgen, da ich heute - jetzt - noch in mein normales Leben abtauche: Es ist Zeit Tomaten, Gurken etc. ins 'Freie' zu bringen ... ;-)

LG,
emha
 
Zuletzt bearbeitet:
Ich dachte an sowas...

Code:
#!/bin/sh
pname=""
pid=""

switch()
{
# todo
#
# top -b | grep $pid
# compare STAT 
# kill -CONT or -STOP
#
}    

getname()
{
 echo "pname:" $pname
 pid=`pgrep $pname`
 echo "pid: "$pid
}

pause()
{
 getname
 kill -STOP `echo $pid`
}

cont()
{
 getname
 kill -CONT `echo $pid`
}

help()
{
 exit;
}

case "$1" in
    -p)
    pname=$2
    pause
    ;;
    
    -c)
    pname=$2
    cont
     ;;    

    *)
   # ToDo
   # pname=$1
   #switch
   # ;;
    
esac

LG,
emha
 
Zuletzt bearbeitet:
Aye, mein grep war zu unpraezise. Kuck mal in ps(1), dort steht der Status weiter unten erklaert, den ps anzeigt. Interessant ist das erste 'T'.

Morgen Krüme... Unull,

'ps' scheint ja Dein Liebling zu sein und auch ich freunde mich immer mehr damit an (anstatt es nur als Anzeige zu nutzen). Z.Z. kämpfe ich aber mit 'pgrep', da mein 'ppause - p ld' auch den hald-* stoppt...

Nebenher: 'ls Univers | grep sun' und ein entsprechendes 'kill -STOP sun' klappt auch nicht...

LG,
emha
 
Ich gehe z.Z. einen (Um)Weg über:

Code:
stop()
{
 ...
 top -b | grep -o '\<ld\>' >> test.tmp
 top -b | grep -o '\<javac\>' >> test.tmp
 ...
 for item in `cat test.tmp | awk '{ print $1 }'`; do
  kill -STOP $item;
 done
 ...
}

bzw.

Code:
cont()
{
 ...
 top -b | grep 'STOP' >> test.tmp
 ...
 for item in `cat test.tmp | awk '{ print $1 }'`; do
  kill -CONT $item;
 done
}

Ist nicht schön und bei cont() kann mehr gestartet werden, als vorher mit stop() angehalten wurde, aber erstmal geht's.
Das Stoppen einzelner Prozesse ist rausgeflogen, es geht mir ja darum Rechenzeit für mich zu bekommen und 'make', 'ld', 'cc1*', etc anzuhalten.
Ausserdem lerne ich dadurch ja erst...

LG,
emha
 
Zurück
Oben