Programm nach reboot fortsetzten

OP #1822980
Lesenswert?

Hallo,

ich versuche grad ein programm welches ich geschrieben hab, nach dem 
reboot von der stelle fortzusetzten wo der reboot stattgefunden hat.

Allerdings habe ich keinen ansatz dafür.

hab zwar etwas gegooglet, aber nichts gefunden. vielleicht suche ich ja 
falsch.

Kann mir jemand da behilflich sein???

danke im voraus!
#1823125
Lesenswert?

E. Grass schrieb:
> ich versuche grad ein programm welches ich geschrieben hab, nach dem
> reboot von der stelle fortzusetzten wo der reboot stattgefunden hat.

Dieses Problem ist nicht ganz trivial zu lösen.

Die sicherste Lösung wäre suspend-to-disk. Das ist natürlich kein 
richtiger reboot, aber wenn es dir nur ums Ausschalten und nicht um das 
rebooten in einen neuen Kernel oder so geht die einfachste und sicherste 
Lösung.

Eine weitere Lösung ist das laufende Programm zu "checkpointen". Das ist 
allerdings nicht ganz einfach und generell umstritten ob dies überhaupt 
sinnvoll machbar ist, weil da so viele Parameter mit reinspielen. Für 
Linux gibts eine experimentelle Implementierung von "Checkpoint / 
Restart" (einfach mal danach googlen). Ich würde aber davon eher abraten 
und wo es geht suspend-to-disk einsetzen.

Die dritte Lösung ist natürlich das Programm dahingehend zu ändern, dass 
es den Status abspeichern und von der Festplatte laden kann. Das ist im 
Gegensatz zum OS-basierten checkpointing wesentlich einfacher zu 
implementieren.
#1823486
Lesenswert?

Du musst den funktionalen Ablauf deines Programmes nicht als folge von 
Befehlen implementieren, sondern als Statemachine. Dessen Zustand kann 
mann relativ einfach abspeichern. z.B. beim Brownout.
Nach dem Restart wieder einlesen und weiter gehts.
Kann je nach Aufgabe sehr komplex werden.
#1823503
Lesenswert?

Mir ist die Frage zu unpräzise. Was ist mit einem "Reboot" gemeint? Es 
ist doch eigentlich die Eigenart eines Reboot-Vorganges, dass das 
Programm eben nicht weiter ausgeführt wird, sondern "von vorn" begonnen 
wird. So gesehen wäre es ein Paradoxon.

Bei einem Mikrocontroller könnte man, wenn er "hängt", statt eines 
Hardware-Resets einen Interrupt nutzen. Der ISR würde diese Information 
ja dann zur Verfügung stehen - solange der Stack noch intakt ist. Die 
ISR könnte die Situation dann analysieren, eventuell das System 
modifizieren und dann die Ausführung an der gleichen Stelle fortsetzen.
OP #1823575
Lesenswert?

Die ansätze von Michael B. und Volker Z. waren schon in der Richtung die 
ich meinte.

Sorry, dass ich etwas unpräzise war.

Ich möchte die Systemuhr/Hardwareuhr meines Systems Linux testen. Dafür 
wollte ich ein programm schreiben und ein neustart innerhalb des 
Programmes aufrufen und dann den Test von dort fortsetzten so innerhalb 
meines Programmes der neustart(reboot) aufgerufen wurde.

@Volker Z.: hast du vielleicht eine link wo man mehr dazu lesen kann, 
insbesondere ein teil mit, wie man zustände speichert ?

@Michael B.: es soll kein neuer Kernel rebootet werden.
Es stellt sich für mich noch die Frage, wie ich das Programm welches ich 
geschrieben habe, nach dem neustart automatisch wieder starte.

Vielleicht habt ihr links wo sowas ähnliches zum lesen gibt.
#1823585
Lesenswert?

E. Grass schrieb:
> wollte ich ein programm schreiben und ein neustart innerhalb des
> Programmes aufrufen und dann den Test von dort fortsetzten so innerhalb
> meines Programmes der neustart(reboot) aufgerufen wurde.
>
> Es stellt sich für mich noch die Frage, wie ich das Programm welches ich
> geschrieben habe, nach dem neustart automatisch wieder starte.

Das da ist doch ganz einfach lösbar ohne eine einzige Änderung am 
System.
Übergib dem Programm einen Parameter. Wenn der Parameter gesetzt ist, 
machst du halt da weiter wo do weiter machen möchtest.

Für ein automatisches Starten nach dem booten gibt es viele 
Möglichkeiten. Eine Einfache wäre vielleicht ein initscript zu machen.
#1823593
Lesenswert?

Suche nach "Endlicher Automat" oder „Finite State Machine“.

Der Zustand wird in einer "gewöhnlichen" Variablen gespeichert.
Wo du sie "Neustart fest" speicherst, hängt von deinem System ab 
(eeprom,Fash,SD-Karten, SSD, Harddisk, etc..

RAM geht auch, wen er nicht beim Neustert überschrieben wird und du nur 
einen Warmstart machst.

Was für eine system hast Du?
Gast #1823694
Lesenswert?

E. Grass schrieb:
> Ich möchte die Systemuhr/Hardwareuhr meines Systems Linux testen. Dafür
> wollte ich ein programm schreiben und ein neustart innerhalb des
> Programmes aufrufen und dann den Test von dort fortsetzten so innerhalb
> meines Programmes der neustart(reboot) aufgerufen wurde.

Mir ist zwar nicht klar für was Du einen Reboot brauchst, aber ja...

Du möchtest ja an einer bestimmten Stelle in deinem Programm einen 
Reboot machen. Also hast Du somit schon zwei Zustände: normaler 
Programmstart, Programmstart nach reboot. Also musst Du dir den Zustand 
irgendwie merken (z.B. auf die Festplatte speichern). Wenn Du eben dein 
Programm startest, fragst Du den letzten Zustand ab. KDE, Gnome, Xfce 
und wie sie noch alle heißen haben doch sicher einen Autostart-Ordner 
oder der gleichen. Dein Programm legt hier einen symbolischen Link auf 
sich selber an.
OP #1823973
Lesenswert?

Volker Zabe schrieb:
> Suche nach "Endlicher Automat" oder „Finite State Machine“.
>
> Der Zustand wird in einer "gewöhnlichen" Variablen gespeichert.
> Wo du sie "Neustart fest" speicherst, hängt von deinem System ab
> (eeprom,Fash,SD-Karten, SSD, Harddisk, etc..
>
> RAM geht auch, wen er nicht beim Neustert überschrieben wird und du nur
> einen Warmstart machst.
>
> Was für eine system hast Du?

Wenn dann müsste ich auf Flash speichern. Ich dachte mir ich ereuge 
einfach eine Datei, lege sie ab und dann wenn das programm durch ist 
lösch ich die datei wirder

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren