2017-05-10 6 views
1

So kann timeout das ultimative Zeitlimit für einen Prozess/Befehl wie erwähnt here und here festgelegt werden. Beispiel: timeout 300 sleep 1000 kehrt nach 300 Sekunden selbst anstelle von 1000 zurück.So erhöhen Sie die Zeitlimitgrenze für einen Prozess, der mit dem Befehl 'timeout' ausgeführt wird

Aber gibt es eine Möglichkeit, dieses Limit im laufenden Betrieb zu ändern, während der Prozess noch läuft? Das ist also, was ich suche.

at time 0 : timeout 300 python long_run.py 
at time 250 : <some way to extend the timeout limit by another 300 minutes or so> 

Ich habe versucht, zwei Möglichkeiten, folgende, konnte es aber nicht funktioniert.

Durch GDB

Ich versuchte timeout Prozess mit gdb zu befestigen. Es zeigte folgenden Aufruf-Stack, aber ich konnte keine Variable finden, deren Wert ich aktualisieren könnte, um das Zeitlimit zu erhöhen.

(gdb) where 
#0 0x00007f10b49f6e8c in __libc_waitpid (pid=15753, stat_loc=0x7fff0c799f30, options=0) at ../sysdeps/unix/sysv/linux/waitpid.c:31 
#1 0x00000000004022d8 in ??() 
#2 0x00007f10b4643f45 in __libc_start_main (main=0x401fc0, argc=4, argv=0x7fff0c79a0e8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff0c79a0d8) 
    at libc-start.c:287 
#3 0x0000000000402479 in ??() 
0 0x00007f10b49f6e8c in __libc_waitpid (pid=15753, stat_loc=0x7fff0c799f30, options=0) at ../sysdeps/unix/sysv/linux/waitpid.c:31 
31  ../sysdeps/unix/sysv/linux/waitpid.c: No such file or directory. 
(gdb) p *(stat_loc) 
$2 = 4204240 

Durch/proc/

Gibt es alles, was wir in/proc // Grenzen oder stat-Datei tun können Zeitlimit für timeout Prozess oder Kindprozess zu aktualisieren.

+0

Haben Sie _have_, um es speziell über 'Timeout' zu tun? – ilkkachu

+0

Was erfordert eine Verlängerung des Timeouts? Warum nicht einfach das Timeout für 550 Sekunden einstellen? – chepner

+1

Anders gesagt, was passiert zum Zeitpunkt 250, dass Sie entscheiden, das Timeout zu verlängern? Sie können das längere Zeitlimit für den Start einplanen und dann zum Zeitpunkt 250 entscheiden, ob der Prozess vorzeitig abgebrochen oder bis zum ursprünglichen Zeitlimit fortgesetzt werden soll. – chepner

Antwort

0

Konvergierend die Lösung zu Frage basierend auf Mark Plotnick 's viel hilfreiche Kommentare. 1

Lösung

kill -STOP stoppt einen Prozess und kill -CONT nimmt es.

So kill -STOP pid_of_timeout wird das Timeout/Timer ausgeführt, während Child-Prozess weiterhin ausgeführt wird. Wir können den Zähler wieder aufnehmen, wenn wir wollen, indem wir kill -CONT pid_of_timeout

Dies bedeutet, um eine Verzögerung von sagen wir 50 in den Timer hinzufügen, wird folgendes tun den Trick.

kill -STOP pid_of_timeout ; sleep 50 ; kill -CONT pid_of_timeout

Lösung 2

den Timeout Prozess GDB Anfügen. Es wird Timeout-Prozess einfrieren. Trennen Sie sich von GDB, wenn Sie fertig sind.

Lösung 3

die source code of timeout ändern, kompilieren und es statt System "timeout" Prozess ausgeführt.

Verwandte Themen