Timeout klingt nach dem, wonach Sie suchen.
man timeout timeout - run a command with a time limit
Aus Debugginggründen möchte ich einen dieser Fehler nur gelegentlich entdecken. Deshalb möchte ich eine while-Schleife in der Shell codieren
Problem hierbei ist, dass sich die PID ändert. Kannst du mir einen Hinweis geben, wie ich das machen soll? Ich benutze die zsh, aber auch andere Shells sind willkommen!
Timeout klingt nach dem, wonach Sie suchen.
man timeout timeout - run a command with a time limit
Habe das schon eine Weile nicht gemacht, aber die grundlegende Idee ist, die laufende Shell dazu zu bringen, ihre PID an eine benannte Datei zu senden, bevor sie eine Schleife durchläuft, und dann diese Datei mit einem separaten Killer-Programm, in dem sich der Timer befindet, wieder einzulesen. Es ist nicht "hart", aber der Teufel steckt im Detail ...
Versuchen Sie das Bash-Skript hier:
http://www.cyberciti.biz/faq/shell-scripting-run-command-under-alarmclock/
Es führt einen Watchdog-Prozess aus, der die PID des auszuführenden Unterbefehls kennt. Einschränkung: In diesem Skript muss der Befehl zum Töten das unmittelbare Kind des Skripts sein.
#/usr/bin/env zsh for i in `seq 1 10`; do echo "start sleep"; sleep 30& LAST_CHILD=$! echo "PID\$!: "$LAST_CHILD; echo "wait for kill:" sleep 1 && kill -9 $LAST_CHILD; done
sollte auch mit bash funktionieren, aber ich brauche immer noch eine segfault-erkennung, damit die schleife abbricht.