Bonjour à tous !
Je voudrais réaliser un petit programme de type serveur en C++. Mon objectif est de pouvoir démarrer ce programme sur une machine GNU/Linux. Le programme s’exécuterait indéfiniment, même si l’utilisateur qui l’a lancé a ensuite fermé sa console ou sa session. Le programme pourrait recevoir des commandes via la console pendant son fonctionnement (par exemple si l’administrateur veut l’arrêter). À la suite de certaines commandes, le programme pourrait afficher en retour des informations dans la console.
Par exemple, OpenSSH sous Ubuntu peut-être démarré avec la commande sudo /etc/init.d/ssh start
. En cours de fonctionnement, l’utilisateur peut afficher son statut avec la commande sudo /etc/init.d/ssh status
et peut l’arrêter avec sudo /etc/init.d/ssh stop
. Je voudrais obtenir quelque chose de similaire.
Mes questions sont les suivantes :
- Comment faire pour que le programme ne s’arrête pas lorsque l’utilisateur ferme sa session ? Le programme doit être lancé en arrière-plan (ou en tant que tâche de fond) ? Je sais qu’il est possible de faire cela avec
nohup
. Comment rendre cela transparent aux yeux de l’admin (comme avec OpenSSH) ? - Une fois que le programme lancé, comment réceptionner des commandes (et leurs paramètres) depuis la console ? Je sais déjà comment récupérer les arguments de la commande au lancement du programme (
int argc, const char * argv[]
du main en C++) mais je ne sais pas comment faire cela pendant le fonctionnement.
Je n’ai pas de connaissances en programmation système ni sur le fonctionnement interne de Linux. Par exemple, je ne sais pas ce que sont les threads. Je ne sais pas comment Linux gère les "processus" au sein de la machine et ce qui s’y passe lorsqu’un binaire est exécuté. Je n’ai pas de définition précise du foreground et du background. Si vous avez un cours ou un tutoriel sur le sujet, je suis preneur !
Mon objectif est-il réalisable ? Quelles sont les solutions techniques mises en places par OpenSSH (et autres programmes "professionnels") ?
Merci d’avance pour vos réponses, Cordialement,
Croal