Почему write() для программы выхода из канала, когда pipe пишет в стандартный вывод?

У меня есть серверное приложение, которое записывает в дескриптор файла popen("myCommand", "w") в отдельном потоке, и если команда, переданная popen(), приводит к любому выводу в stdout или stderr, приложение my завершается. Тем не менее, это проблема, только когда мое серверное приложение было вызвано через inetd, если я использовал ssh для запуска сервера, у него нет этой проблемы.

Точно так же, когда мое серверное приложение читает из дескриптора файла popen("myCommand2", "r") в отдельном потоке, и если команда, переданная popen(), приводит к любому выводу в stderr (stdin собирается в мой канал), приложение выходит. Опять же, это происходит только при вызове inetd, а не по ssh.

1 ответ

Решение

Вам нужно закрыть все существующие fds процесса, прежде чем открывать канал, затем выполнить перенаправление ввода / вывода. это потому, что если inetd, процесс запускается как демон.

Другие вопросы по тегам