Я написал демон TCP, который принимает клиентские соединения на указанный порт и после этого выполняет команду, используя execv(3). В каждом руководстве по написанию демонов упоминается закрытие stdin, stdout, stderr для успешной демонизации процесса.
Однако я обнаружил, что accept(2) повторно использует номера файловых дескрипторов уже закрытых stdout/stderr, поэтому после вызова fork(2) и execv(3) дочерний процесс записывает вывод в сокет просто потому, что stdout/stderr сопоставляется с файловым дескриптором, теперь связанным с клиентский сокет.
Любые идеи, как я могу избежать этого, не прибегая к перенаправлению вывода оболочки?