Schleife: Programm starten und nach Zeitüberschreitung abbrechen

2595
math

Aus Debugginggründen möchte ich einen dieser Fehler nur gelegentlich entdecken. Deshalb möchte ich eine while-Schleife in der Shell codieren

  • Starten des Programms (wenn es segfault wird => das ist was ich will)
  • Beenden Sie das Programm nach einer bestimmten Zeit (zB einige Sekunden).

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!

3

4 Antworten auf die Frage

4
Ole Tange

Timeout klingt nach dem, wonach Sie suchen.

man timeout timeout - run a command with a time limit 
1
hotei

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 ...

1
Rich Homolka

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.

0
math
#/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.

Es ist nicht nötig, "seq" zu verwenden. Dennis Williamson vor 14 Jahren 0
@Dennis: Ich weiß, das ist nur ein Beispiel. In der Praxis würde ich eine while ((true)) Schleife verwenden. math vor 14 Jahren 0
Nein, ich meinte in `für mich. Dennis Williamson vor 14 Jahren 1