簡體   English   中英

如何通過關閉C中的所有文件描述符來重新啟動或啟動進程

[英]How to restart or start a process with closing all file descriptors in C

我想干凈地重啟我的進程。 所以我試圖調用execv()

看來運作良好。 但是,它保持套接字和文件打開。 有沒有辦法重新啟動(此)過程並關閉所有文件/插槽?

我不想進行僵屍進程,不使用fork()

與其他文件描述符一樣,套接字不會在execfork之間關閉。 如果要關閉它們,則需要自己關閉它們。 有三種可能的方法。

最干凈的解決方案是在調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM