• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

Prozess Status

emha

Well-Known Member
Themenstarter #1
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
 

unull

Nervensäge
#2
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
 

emha

Well-Known Member
Themenstarter #3
Hi unull,

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

emha

Well-Known Member
Themenstarter #5
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:

emha

Well-Known Member
Themenstarter #9
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:

emha

Well-Known Member
Themenstarter #11
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
 

emha

Well-Known Member
Themenstarter #12
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