Forum Linux.debian/ubuntu Debian multitaches ???

Posté par  .
Étiquettes : aucune
0
19
oct.
2004
Linuxiens,

Mon problème est le suivant :
J'ai un serveur de partage de connexion sous knoppix, avec un écran LCD en facade pour afficher l'IP,et d'autres informations. J'ai écrit un petit programme en C qui gère cet écran.
Au démarrage, je lance ssh pour pouvoir administrer mon serveur à distance...
Mais depuis que j'ai mis mon programme en C au démarrage, je n'arrive plus a communiquer avec mon serveur. Je pense que cela est du au fait que mon programme tourne en boucle donc aucune connexion ssh n'est plus possible.

Je voudrais savoir comment pouvoir faire tourner mon programme C en tâche de fond...

Merci
  • # Utilisateur multitache ????

    Posté par  . Évalué à 5.

    J'ai hésité à te répondre tant le titre de ton message rejettait la faute sur l'OS plutot que sur ton manque de jugeote.
    Comme tout programme lancé au démarrage, il faut que ton soft rende la main pour que l'initialisation du système continue à se faire.
    Il faut donc que tu transformes ton programme en "daemon".
    Pour ça, deux solutions, tu le lances au démarrage en utilisant:

    ton_prog &

    ou tu le détaches du terminal directement dans le code, pour ce faire je t'invite à lire la page de man de la fonction setsid.
    • [^] # Re: Utilisateur multitache ????

      Posté par  (site web personnel, Mastodon) . Évalué à 3.

      bah, un bête

      if (fork() == 0) then
      mon programme
      else exit

      ça marche aussi bien. Mais rien ne vaut le "&" ;-)

      Mes livres CC By-SA : https://ploum.net/livres.html

      • [^] # Re: Utilisateur multitache ????

        Posté par  (site web personnel) . Évalué à 1.

        Le & est loin d'etre le meilleur moyen... il ne détahe pas du terminal, il le met en background ce qui est très différent.

        Un daemon propre étant un programme qui se détache du terminal, la première chose à faire est un close(0); close(1); puis un close(2); pour fermer respectivement l'entrée strandard, la sortie standard, et la sortie d'erreur, puis alors de forker le daemon.

        Le top du top c'est d'utiliser syslog pour logger toute sortie régulière, de controle, de debug ou annexe.

        Pour toutes les infos, lire:
        man 2 close
        man 2 fork
        man 2 syslog
    • [^] # Re: Utilisateur multitache ????

      Posté par  (site web personnel) . Évalué à 4.

      la page de man de la fonction setsid

      Je n'y ai jamais rien compris. Tu as réussi à trouver d'autres informations pour comprendre la notion de "session", de "process group leader" et de "controlling tty".

      Les NOTES disent "A process group leader is a process with process group ID equal to its PID" mais c'est quoi un "process group ID" ?
      • [^] # Re: Utilisateur multitache ????

        Posté par  . Évalué à 2.

        Le "process group ID" est un attribut des processus, au même titre que le PID ou l'UID. Il est rarement utilisé.

        Pour le visualiser, ps -j.
  • # pas de solution en ce qui me concerne

    Posté par  . Évalué à 3.

    mais je pense que ton programme en C est lancé lors de la phase d'initialisation, qui comme chacun sait est linéaire sous debian, et si ton programme ne rend pas la main, les autres attendent leur tour sagement et indéfiniment.

    Un peu comme le service réseau qui cherche pendant trois plombes le serveur DHCP alors que le réseau n'est pas dispo, faisant patienter tous les autres service et le démarrage de l'interface graphique jusqu'à récupérer le time-out.

    Sinon je sais pas faire tourner un programme en tache de fond...

    Quoiqu'un bon "ton_prog &" fera peut etre l'affaire :)
  • # nohup XXX &

    Posté par  (site web personnel) . Évalué à 3.

    Oui, un « prog & » devrait suffire pour que le script de démarrage continue tout seul.

    Et peut-être même un « nohup prog & » pour que le programme soit détaché du script qui l'a appelé, pour éviter qu'il ne se termine avec son script parent.
    • [^] # Re: nohup XXX &

      Posté par  (site web personnel) . Évalué à 1.

      de même comment as-tu fait pour avoir cet ecran LCD ?
      J'aimerais m'en procurer un pour par exemple afficher la charge de mon ordi....., tu peut me l'indiquer ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.