Nix
28-12-2004, 10:36
Hallo,
ich möchte ein Sript schreiben, in dem eine CF-Karte mit einem vorhandenen Image beschrieben wird. Leider funktioniert das Script nicht immer, von zehn Durchläufen funktionieren drei. Meist gibt es schon nach der zweiten Zeile des folgenden Ausschnitts einen Fehler. Später sollen übrigens die ganzen echo-Zeilen raus und die K_FORTSCHRITT-Variable mit kdialog in einer Progressbar ausgegeben werden.
`nice -n 19 sudo dd if=$FILENAME of=/dev/hdc > /home/bla/dd.txt 2>&1 &`
PID=$(echo `ps ax | grep '[o]f /dev/hdc' | awk '{print $1}'`)
echo $PID
sudo kill -USR1 $PID
FORTSCHRITT=$(echo `more /home/bla/dd.txt | grep 'transferred' | awk '{print $1}'`)
echo $FORTSCHRITT
K_FORTSCHRITT=$(echo "$FORTSCHRITT/1024" | bc)
echo $K_FORTSCHRITT
while [ "$K_FORTSCHRITT" -lt "$FILE_GROESSE" ] ; do
rm -f /home/bla/dd.txt
touch /home/bla/dd.txt
sudo kill -USR1 $PID
FORTSCHRITT=$(echo `more /home/bla/dd.txt | grep 'transferred' | awk '{print $1}'`)
echo $FORTSCHRITT
K_FORTSCHRITT=$(echo `"$FORTSCHRITT/1024" | bc`)
echo $K_FORTSCHRITT
done
In Zeile 3 soll die vorher erkannte PID vom Aufruf in Zeile 1 angezeigt werden, statt dessen bekomme ich schon eine Fehlermeldung bezüglich der vierten Zeile, als ob der kill-Befehl nicht richtig geschrieben wurde:
Usage:
kill pid ... Send SIGTERM to every process listed.
kill signal pid ... Send a signal to every process listed.
kill -s signal pid ... Send a signal to every process listed.
kill -l List all signal names.
kill -L List all signal names in a nice table.
kill -l signal Convert between signal numbers and names.
Manchmal wird aber eben auch die PID ausgegeben, und das Script läuft normal weiter. Woran kann das liegen?
Vielen Dank schonmal, Jens
PS: Ich weiß, daß man die PID auch einfacher bekommt, aber wohl nur wenn kein 'nice' und 'sudo' vor der eigentlichen Anweisung stehen (Zeile 1). Jedenfalls habe ich es mit $! nicht hinbekommen.
ich möchte ein Sript schreiben, in dem eine CF-Karte mit einem vorhandenen Image beschrieben wird. Leider funktioniert das Script nicht immer, von zehn Durchläufen funktionieren drei. Meist gibt es schon nach der zweiten Zeile des folgenden Ausschnitts einen Fehler. Später sollen übrigens die ganzen echo-Zeilen raus und die K_FORTSCHRITT-Variable mit kdialog in einer Progressbar ausgegeben werden.
`nice -n 19 sudo dd if=$FILENAME of=/dev/hdc > /home/bla/dd.txt 2>&1 &`
PID=$(echo `ps ax | grep '[o]f /dev/hdc' | awk '{print $1}'`)
echo $PID
sudo kill -USR1 $PID
FORTSCHRITT=$(echo `more /home/bla/dd.txt | grep 'transferred' | awk '{print $1}'`)
echo $FORTSCHRITT
K_FORTSCHRITT=$(echo "$FORTSCHRITT/1024" | bc)
echo $K_FORTSCHRITT
while [ "$K_FORTSCHRITT" -lt "$FILE_GROESSE" ] ; do
rm -f /home/bla/dd.txt
touch /home/bla/dd.txt
sudo kill -USR1 $PID
FORTSCHRITT=$(echo `more /home/bla/dd.txt | grep 'transferred' | awk '{print $1}'`)
echo $FORTSCHRITT
K_FORTSCHRITT=$(echo `"$FORTSCHRITT/1024" | bc`)
echo $K_FORTSCHRITT
done
In Zeile 3 soll die vorher erkannte PID vom Aufruf in Zeile 1 angezeigt werden, statt dessen bekomme ich schon eine Fehlermeldung bezüglich der vierten Zeile, als ob der kill-Befehl nicht richtig geschrieben wurde:
Usage:
kill pid ... Send SIGTERM to every process listed.
kill signal pid ... Send a signal to every process listed.
kill -s signal pid ... Send a signal to every process listed.
kill -l List all signal names.
kill -L List all signal names in a nice table.
kill -l signal Convert between signal numbers and names.
Manchmal wird aber eben auch die PID ausgegeben, und das Script läuft normal weiter. Woran kann das liegen?
Vielen Dank schonmal, Jens
PS: Ich weiß, daß man die PID auch einfacher bekommt, aber wohl nur wenn kein 'nice' und 'sudo' vor der eigentlichen Anweisung stehen (Zeile 1). Jedenfalls habe ich es mit $! nicht hinbekommen.