2016-10-25 1 views
0

Je cours une grande application de calcul dans un environnement Linux. mon but est de créer une interface qui puisse communiquer avec l'application à partir d'une fenêtre shell et obtenir les résultats de l'application et l'imprimer dans le shell. Disons que j'ai une application qui écrit des nombres premiers à l'infini dans un fichier. Après un certain temps, si vous voulez savoir ce que l'application faire, est-il possible de créer une interface comme,Communication avec un processus en cours d'exécution à partir du shell

$[ pid ] "Display current number in check"; 
$The number, 17559323 is currently checked if its a prime. 

Il est délibéré que j'ai eu un « $ » dans l'invite comme il devrait être possible pour un utilisateur normal communiquer. les signaux ont besoin d'une exécution privilégiée. Comme je peux avoir de nombreuses instances de cette application en cours d'exécution je ne sais pas comment les sockets peuvent réellement aider car je voudrais parler spécifiquement à ce processus pour obtenir le statut. Toute direction sur la communication avec un processus en cours d'exécution à partir de shell sera très utile.

+0

Vous pouvez faire en sorte que votre application écoute sur une socket pour les commandes. Un programme client peut se connecter à ce socket, envoyer des commandes, lire des réponses et les afficher à l'utilisateur. Si vous avez plusieurs instances de l'application en cours d'exécution, demandez à chacune d'entre elles d'ouvrir une socket (peut-être les nommer après le PID ou quelque chose comme ça). – larsks

+0

Cela ne me donne pas l'interface sans client que je cherche. De plus, il doit avoir une petite application client flottante pour mes pairs afin de communiquer avec l'application. Ce qui signifie que le jeu d'outils n'est pas autonome. (Ni supporté par os outils comme bash stdin/out) – Veera

+0

Donc, au lieu d'un socket, faites-en un serveur http intégré. Maintenant vous pouvez l'interroger avec 'curl'. – larsks

Répondre

0

utiliser les journaux: le client peut grep (ou queue) ce logs pour voir ce qui se passe maintenant. Vous pouvez toujours écrire dans le fichier journal ou créer un gestionnaire de signal qui videra les informations requises dans le fichier après avoir reçu un signal.

+0

Cela ne répond pas à une partie de la question de la communication avec un processus en cours via shell. Pour un processus en cours d'exécution, écrire un tel journal est très inefficace si personne n'interroge le statut de l'exécution de cette instance, 2. Il ralentira l'application à cause des cycles r/w du disque dur et 3. ne fera que vider l'espace. Le but principal est le polissage de l'information et non la documentation d'une exécution. – Veera