gpt4 book ai didi

c - 如何通过关闭 C 中的所有文件描述符来重新启动或启动进程

转载 作者:太空宇宙 更新时间:2023-11-04 01:03:59 24 4
gpt4 key购买 nike

我想干净地重新启动我的过程。所以我尝试调用 execv()

看起来效果不错。但是,它使套接字和文件保持打开状态。有没有办法重新启动(这个)进程并关闭所有文件/套接字?

我不想做一个僵尸进程,我不使用fork()

最佳答案

就像任何其他文件描述符一样,套接字不会在 execfork 中关闭。如果你想关闭它们,你需要自己关闭它们。存在三种可能的方法。

最干净的解决方案是跟踪所有套接字并在调用 exec 之前关闭它们。根据您的应用,这可能可行也可能不可行。

另一种解决方案是在创建套接字后立即在套接字上设置“close on exec”标志,使用一对 fcntl 调用(F_GETFD,添加 FD_CLOEXEC,然后是 F_SETFD)。不要忘记您从 accept 获得的套接字。

如果无法做到这一点,您可以在调用 exec 之前粗暴地关闭所有文件描述符,方法如下:

n = sysconf(_SC_OPEN_MAX);
for(i = 3; i < n; i++)
close(i);

关于c - 如何通过关闭 C 中的所有文件描述符来重新启动或启动进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28357558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com