Есть ли безопасный и простой способ выполнения подпроцесса, не позволяя ему иметь доступ к дескрипторам файлов родителей? В частности, в моем случае это происходит:Предотвращение подпроцесса от наследования файловых дескрипторов
Родительский процесс прослушивает гнездо 127.0.0.1:8000.
Родительский процесс использует exec для запуска подпроцесса. Этот подпроцесс вилки и запускает демона.
Родительский процесс закрывается.
Демон теперь держит дескриптор файла открытым (продолжает слушать порт 8000).
Возможно, существует некоторая команда, которая может закрыть все дескрипторы файлов перед выполнением подпроцесса?
Эта проблема возникает, например, если вы вызываете команды «обслуживание someservice start» из сценария веб-сервера.
Возможно, есть некоторые команды, которые могли бы запустить сценарий службы в «чистом» контексте, что-то вроде:
run-detached service someservice start
Какой бы привести все файловые дескрипторы должны быть закрыты, переменные окружения, чтобы быть снята с охраны и т.д. - так, чтобы контекст, выполняемый службой внутри, был как можно более простым.
[[FD_CLOEXEC'] (http://man7.org/linux/man-pages/man2/fcntl.2.html) – Patrick
[Вы не первый человек, чтобы сделать это] (http: // jdebp .ru./Программное обеспечение/nosh/bsd-service-command.html # Наследование), но правильный подход заключается в том, чтобы не запускать dæmons таким образом, в первую очередь, и использовать реальное управление услугами, а не искать способы привязки дочерних процессов , – JdeBP
Это зависит от программы, которая 'fork()' s закрывает ненужные дескрипторы файлов (или маркирует их как close-on-exec) перед 'exec()' в новую программу. Это не то, что вы можете навязать снаружи как системный администратор. (Для консультаций по аспектам программирования вы можете захотеть перейти к [так]). –