Mahlzeit, wir sind gerade dabei eine Software, welche für ein Controller geschrieben wurde auf x86 umzuschreiben. Diese soll dann zum testen usw. genutzt werden. Jetzt gibt es dort eine Funktion einen Reset zu machen. Ist so etwas in Linux irgendwie möglich? ich müsste ja quasi die main wieder aufrufen. Wobei dann ja noch alle variablen (statische) erhalten bleiben? Diese müssten ja natürlich auch zurückgesetzt werden. Gibt es in Linux eine Funktion um eine C-Applikation neu zu starten (aus laufendem Code heraus)
Felix schrieb: > Ist so etwas in Linux irgendwie möglich? > ich müsste ja quasi die main wieder aufrufen. man exec e.g. https://stackoverflow.com/questions/10206190/restart-program-in-c leo
Einfach das Program beenden (exit()) und die Programm-Ausführung von einem Script aus in eine Schleife einbetten, wäre eine einfache Möglichkeit.
> Program beenden (exit()) und die Programm-Ausführung von > einem Script aus in eine Schleife einbetten & > Wobei dann ja noch alle variablen (statische) erhalten bleiben? Wohl eher nicht. Ganz primitiv: main(){ reset: ... ... ... goto reset; ... }
Es fragt sich halt, wie viel davon beim Start neu initialisiert wird, und in wie fern das gleich wie beim Controller ist. Man könnte in der main ein setjmp, und als reset dann nen longjmp machen. Jenachdem kann man auch früher ansetzen: https://linux.die.net/man/1/ld#:~:text=-init=name Inwieweit das nachher aber vergleichbar mit dem Controller ist, kann ich nicht sagen.
Alles viel zu kompliziert. exec() ist die richtige Antwort.
1 | int main (int argc, char* argv) { |
2 | ...
|
3 | // Programm neustarten
|
4 | execvp (argv [0], argv); |
5 | }
|
Eventuell stat argv[0] "/proc/self/exe" nehmen. Das sollte dann eigentlich selbst falls argv[0] anders gesetzt wird oder die Datei verschoben oder gelöscht wurde noch gehen. Durch ne neue Version ersetzen und die laden geht dann halt aber nicht.
Ihr habt doch sicherlich ein Loggingsystem laufen, wieso nicht darauf triggern und die Applikationen killen und neustarten?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.