macos – 在OSX / Unix上启动不继承文件/端口的子进程
发布时间:2020-12-16 01:51:05 所属栏目:安全 来源:网络整理
导读:我想在OS X上启动子进程,以便子进程不继承当前进程的打开文件/端口. 有关如何完成此任务的任何建议?我可以使用system()函数调用的Shell命令也可以工作 – 我只是不知道有一个好的shell命令来启用它. 谢谢! 解决方法 你没有指定你正在开发的语言,但既然你提
我想在OS X上启动子进程,以便子进程不继承当前进程的打开文件/端口.
有关如何完成此任务的任何建议?我可以使用system()函数调用的Shell命令也可以工作 – 我只是不知道有一个好的shell命令来启用它. 谢谢! 解决方法
你没有指定你正在开发的语言,但既然你提到了system(),我认为你的意思是C或C.
通常,这是通过使用fcntl()在您不希望继承的那些文件描述符上设置close-on-exec标志来实现的: int fd = open("somefile",O_RDONLY); fcntl(fd,F_SETFD,FD_CLOEXEC); 您也可以通过在fork之后但在exec之前遍历子进程中的所有可能的fd来执行暴力破解方式.这有点棘手,因为它要求你知道最大可能的fd值是多少,而且效率也会降低,因为你最终会迭代并“关闭”一堆未使用的fd.像这样的东西: pid_t pid = fork(); switch (pid) { case 0: // In the child process. Iterate through all possible file descriptors // and explicitly close them. long maxfd = sysconf(OPEN_MAX); for (long i = 0; i < maxfd; ++i) { close(i); } // Now exec the new program,file-handle free. execlp("someprogram","arg1","arg2"); break; case -1: // TODO: handle errors. break; default: // Parent process. int status; pid_t finished = waitpid(pid,&status,0); break; } 希望有所帮助, 埃里克·梅尔斯基 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |