Pourquoi n'écrire () pour le programme de sortie de tuyau lorsque tuyau écrit à stdout?
Question
J'ai une application de serveur qui écrit dans un descripteur de fichier popen ( « myCommand », « w ») dans un thread séparé et si la commande passée à popen () se traduit par une sortie à stdout ou stderr, les mes sorties d'application . Cependant, ce n'est un problème lorsque mon application serveur a été invoqué par inetd, si je ssh pour lancer le serveur, il ne dispose pas de cette question.
De même, lorsque ma demande de serveur lit à partir d'un descripteur de fichier popen ( « myCommand2 », « r ») dans un fil séparé et si la commande passée à popen () aboutit à une sortie quelconque de stderr (stdin va ma pipe ), la sortie application. Encore une fois, cela se produit uniquement avec convoquant inetd, sans invocation ssh.
La solution
vous devez fermer tous les existait fds du processus avant d'ouvrir le tuyau, puis faire i / o redirection. c'est parce que si inetd, le processus fonctionne comme un démon.