Ich habe ein schlecht codiertes Programm mit Endlosschleife, das ich über die Befehlszeile ausführen möchte – aber nicht für immer. Ich möchte ulimit verwenden, damit es abgebrochen wird, wenn es sich endlos wiederholt.
Ich versuche es:
$> bash -c "ulimit -t 1; java myinfloopprogram"
aber es ist, als ob nichts passiert. Was ist los, ist mein Kommandozeilenbefehl falsch? myinfloopprogram läuft einwandfrei.
Ich verwende ein Terminal und die Version ist Ubuntu 9.10.
Antwort1
Verwendet das sich wiederholende Programm tatsächlich die CPU?
-t steht für die CPU-Zeit, nicht für die Echtzeit. Wenn Ihr Programm also tatsächlich keine CPU-Zeit verwendet, wird es nicht beendet.
Antwort2
Versuchen Sie es stattdessen vielleicht mit so etwas:
java myinfloopprogram &
pid=$!
for i in $(seq 1 60); do
kill -0 $pid >/dev/null || break
sleep 1
done
kill -0 $pid >/dev/null || kill -TERM $pid
Antwort3
ulimit
ist wahrscheinlich nicht das, was Sie brauchen. Sie brauchen eine Art Bash-Timeout-Funktion. In Bash ist nichts eingebaut, aber es gibt ein paar Skripte, die das tun. zBhttps://stackoverflow.com/questions/687948/timeout-a-command-in-bash-without-unnecessary-delay