执行子进程有没有一种安全和简单的方法,但不允许它访问父文件描述符?特别是在我的情况下发生这种情况:防止子进程继承文件描述符
父进程侦听套接字127.0.0.1:8000。
父进程使用exec来运行子进程。这个子进程分叉并启动一个守护进程。
父进程关闭。
守护进程现在保持打开文件描述符(一直监听端口8000)。
也许有一些命令可以在执行子进程之前关闭所有文件描述符?
如果您从Web服务器脚本调用'service someservice start''命令,则会出现此问题。
也许有一些命令,可以在一个“干净”的环境中运行的服务脚本,像:
run-detached service someservice start
这将导致所有的文件描述符被关闭,环境变量被取消设置等 - 使服务运行的上下文尽可能地基本。
查看['FD_CLOEXEC'](http://man7.org/linux/man-pages/man2/fcntl.2.html) – Patrick
[你不是第一个做这个的人](http:// jdebp .eu。/ Softwares/nosh/bsd-service-command.html#Inheritance),但正确的做法是不要以这种方式启动守护进程并使用真正的服务管理,而不是寻找避免子进程的方法。 – JdeBP
这是由'fork()'在exec()'新程序之前关闭不需要的文件描述符(或将它们标记为exec-on-exec)的程序。这不是你可以从外面强加给系统管理员的东西。 (关于编程方面的建议,你可能想去[如此])。 –