![](/img/trans.png)
[英]How to list all file descriptors of a process in C, without calling lsof or parsing /proc/$PID
[英]How to restart or start a process with closing all file descriptors in C
我想干凈地重啟我的進程。 所以我試圖調用execv()
。
看來運作良好。 但是,它保持套接字和文件打開。 有沒有辦法重新啟動(此)過程並關閉所有文件/插槽?
我不想進行僵屍進程,不使用fork()
。
與其他文件描述符一樣,套接字不會在exec
或fork
之間關閉。 如果要關閉它們,則需要自己關閉它們。 有三種可能的方法。
最干凈的解決方案是在調用exec
之前跟蹤所有套接字並關閉它們。 根據您的應用程序,這可能會或可能不會。
另一個解決方案是在創建套接字后立即使用一對fcntl
調用( F_GETFD
,添加FD_CLOEXEC
,然后F_SETFD
)在套接字上設置“ close exec”標志。 不要忘記您從accept
獲得的套接字。
如果無法做到這一點,則可以在調用exec
之前使用以下類似的方法殘酷地關閉所有文件描述符:
n = sysconf(_SC_OPEN_MAX);
for(i = 3; i < n; i++)
close(i);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.