récupérer console d'un programme en arrière plan - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 30-01-2013 à 10:54:46
un daemon ferme ses FDs, donc non.
Marsh Posté le 30-01-2013 à 11:34:17
Ton programme il écrit pas dans un fichier de logs des fois ?
Marsh Posté le 30-01-2013 à 19:12:59
en production, il n'écrit pas de log non car on est sur un système embarqué, et les écritures flash ne sont pas recommandées.
Il s'agit d'une application que j'ai écrit donc j'en ai la maitrise, mais si je suis en mesure de rajouter de nouvelles fonctionnalités ( comme les logs sur UDP ), les versions déjà en productions n'ont pas cette fonction, et parfois pour faire du diagnostic, j'ai besoin de récupérer les logs d'une application déjà en cours de démarrage ( j'ai besoin de ne pas quitter l'application pour ne pas réinitialiser tout ).
L'application n'est pas un démon ( pas d'appel à daemonize() ) donc les descripteurs de fichiers ne sont pas fermés, d'ailleurs, comme je l'explique plus haut, les logs par défaut sont sur la sortie standard, que je peux récupérer si je lance l'exécutable à partir d'une console.
D'ailleurs, si l'application est lancée au démarrage, si je fais un ps aux, dans la colonne tty j'ai un "?". Si par contre je relance l'application à partir d'une console ( ex une session ssh ), dans cette même colonne, je vois pts/0.
Marsh Posté le 31-01-2013 à 09:48:16
Je pense qu'il faudrait que tu regardes du côté des pipe. La primitive pipe() te permet de créer un canal de communication directement en mémoire.
L'idée serait qu'au boot tu redirige la sortie de ton programme dans ce pipe nommé, et qu'au besoin, depuis un autre terminal tu lise ce pipe.
Maintenant ce que je ne sais pas, c'est si aucune lecture n'est présente sur le pipe ce qu'il se passe, honnêtement je ne maîtrise pas bien ces procédés que j'utilise rarement (j'utilises plus régulièrement des fifo, mais la ca fait une entrée de le système de fichier, ce qui ne semble as compatible avec ce que tu indiques).
Marsh Posté le 31-01-2013 à 11:09:22
je ne peux pas écrire de code, je souhaite le faire sur un programme existant et en cours d'exécution.
J'ai trouvé l'astuce suivante, mais ce n'est pas parfait :
cat /proc/XXXX/fd/1 > /dev/pts/0 , cela redirige la sortie standard du processus XXXX sur la console voulue. Le problème est qu'il attend au moins un retour chariot avant de commencer à afficher, et il affiche chaque ligne sur la même ligne.
Il faut que je peaufine ca, ou que je trouve une commande système permettant de faire ça.
Marsh Posté le 30-01-2013 à 10:06:59
Bonjour,
J'ai un programme qui démarre automatiquement au démarrage de la machine , du coup je n'ai pas les logs de la sortie standard ( normal ). Par contre, si je quitte mon programme et que je le relance à partir d'une console, à ce moment là, j'ai les logs ( normal aussi ).
Je cherche à savoir s'il est possible de rediriger sur la console courante la sortie standard d'un exécutable en cours d'exécution, et comment faire dans ce cas ?
Merci d'avance