Prozess muss für Linux respawn sein



  • Hallo NG,

    ich muss dafür sorgen, das ein Prozess in einem Linux OS vom init Prozess neu gestartet wird, wenn er stirbt.
    Die Variante ihn in die Inittab einzutragen fällt leider weg. Nun denke ich daß es bestimmt eine lib gibt, über dessen Funktionen ich einen Prozess beim init Prozess anmelden kann. Etwa so

    #include <allesWasIchBrauche.h>
    #include <initprocess.h>
    
    int main(int *argc, char *argv[]){
    
      // Sinnvoller Code
      announceMeAtTheInitProcess();
    
      do{
        // Sinnvoller Code
      }while(theWorldGoesOn);
    
      // Mehr sinnvoller Code
      return errCode;
    }
    

    Weiß einer wie so eine Lib heißt und welche Funktion ich aufrufen muss?

    Der Prozess wird über ein rc Startscript gestartet. Ich weiß das die Frage nicht hierher gehört, aber geht das auch evtl. über Kommandos im Startscript? Mir wäre aber eine Lösung über eine lib lieber. Dann sorgt der Prozess dafür sich beim Initprozess anzumelden, egal ob er über das Script oder von Hand gestartet wird.

    Danke schon mal,
    M. Incani



  • Du könntest dir ein Wächterprogramm schreiben.

    Als erstes forkst du den Prozess und rufst im neuen Prozess exec auf. Mit waitpid kannst du dann den Elternprozess warten lassen, bis der Kinprozess beendet wurde. Dann startest du den einfach neu.



  • ProgChild schrieb:

    Du könntest dir ein Wächterprogramm schreiben.

    Als erstes forkst du den Prozess und rufst im neuen Prozess exec auf. Mit waitpid kannst du dann den Elternprozess warten lassen, bis der Kinprozess beendet wurde. Dann startest du den einfach neu.

    Jop, es gibt auch Init-Tools, die so was automatisch machen: Daemontools von DJB zB oder minit von FeFe. Glaube ich.



  • Warum nicht ein Programm schreiben, was einfach nicht stirbt? 😃



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Mich würde interessieren, ob es dafür in Linux Standardtools gibt. Mit zusätzlicher Software hätte ich ein Problem.

    Grüße M. Incani

    rüdiger schrieb:

    Jop, es gibt auch Init-Tools, die so was automatisch machen: Daemontools von DJB zB oder minit von FeFe. Glaube ich.



  • Das ist nicht so sehr das Problem. Es gibt auch auch Requirements die eingehalten werden müssen.

    Grüße M. Incani

    LordJaxom schrieb:

    Warum nicht ein Programm schreiben, was einfach nicht stirbt? 😃



  • Wenn aber der Elternprozess mit kill -9 weggeschossen wird, hätte ich auch keine Möglichkeit mehr zu reagieren.
    Wenn ich eine Anwendung in der Inittab mit respawn eintrage, kümmert sich der Initprozess darum diese neu zu starten, wenn sie stirbt. Da hilft auch kein kill -9. Das funktioniert aber soweit ich weiß nur beim reboot. Wenn die Anwendung nachträglich von Hand gestartet wird, ist diese Technik nicht möglich. Deshalb würde ich gerne eine Anwendung beim Initprozess registrieren können.

    Grüße, M. Incani

    ProgChild schrieb:

    Du könntest dir ein Wächterprogramm schreiben.

    Als erstes forkst du den Prozess und rufst im neuen Prozess exec auf. Mit waitpid kannst du dann den Elternprozess warten lassen, bis der Kinprozess beendet wurde. Dann startest du den einfach neu.



  • wenn ich als root etwas mit kill -9 beenden will, und das ding startet ungefragt neu, dann geh ich davon aus das das ein virus ist.

    wenn ich als user etwas mit kill -9 beenden kann was ich nicht beenden koennen soll dann gibts anscheinend ein rechteproblem



  • daHa schrieb:

    wenn ich als root etwas mit kill -9 beenden will, und das ding startet ungefragt neu, dann geh ich davon aus das das ein virus ist.

    wenn ich als user etwas mit kill -9 beenden kann was ich nicht beenden koennen soll dann gibts anscheinend ein rechteproblem

    Sehe ich genauso. Ein Apache läuft ja auch nicht in einer Schleife oder als inittab-Prozess. Ich kenne eigentlich nur ein Programm, wo so etwas gemacht wird (mit einer Schleife in einem Script), und das nur weil der Kerneltreiber, den die Anwendung ansteuert, einmal extrem instabil war. Evtl wäre so ein Script auch für Dich eine Lösung? Das kann man zwar immernoch killen, aber letztendlich kann man auch init hart abschießen...



  • LordJaxom schrieb:

    daHa schrieb:

    wenn ich als root etwas mit kill -9 beenden will, und das ding startet ungefragt neu, dann geh ich davon aus das das ein virus ist.

    wenn ich als user etwas mit kill -9 beenden kann was ich nicht beenden koennen soll dann gibts anscheinend ein rechteproblem

    Sehe ich genauso.

    Ack.

    Ein Apache läuft ja auch nicht in einer Schleife oder als inittab-Prozess.

    Nein, wird höchstens von monit oä überwacht.


Anmelden zum Antworten