在linux中查找运行程序句柄,如何查找我的进程在Linux中打开的文件句柄?
首先,您并不需要關心很多關于您不知道的打開的文件描述符。如果你知道你不會再寫信給他們,關閉它們是一個好主意,并且不會傷害 - 畢竟你只是做了一個fork(),這個fds打開了兩次。但是同樣,如果你讓他們開放,他們也不會打擾你 - 畢竟,你不知道他們,你大概不會隨機寫給他們。
至于你的第三方庫會做什么,這有點夸張。有些人可能不希望遇到fork()的情況,最終可能會意外地從兩個進程寫入同一個fd,而沒有進行任何同步。其他人可能不希望讓你關閉他們的fds。你必須檢查。這就是為什么在庫中隨機打開一個文件描述符并且不給調用者進行管理是一個壞主意。
這么說,本著回答原問題的精神,沒有一個特別好的方法。您可以在文件描述符上調用dup()或dup2();如果關閉,該呼叫將以EBADF失敗。所以,你可以說:
int newfd = dup(oldfd);
if (newfd > 0)
{
close(newfd);
close(oldfd);
}
,但在這一點上,你只是作為小康說,擺在首位close(oldfd)和忽略任何EBADFs。
假設您仍然想要關閉所有內容的核選項,則需要找到可能的最大打開文件描述符數。假設1至65,535不是一個好主意。首先,當然,fds從0開始,但也沒有定義特定的上限。為了便于攜帶,POSIX的sysconf(_SC_OPEN_MAX)應該在任何理想的POSIX系統上告訴你,盡管嚴格來說它是可選的。如果你感到偏執狂,請檢查返回值為-1,但此時你大多不得不退回硬編碼值(1024應該沒問題,除非你做的事很奇怪)。或者,如果您對Linux特定的版本沒有問題,您可以在/ proc中進行挖掘。
不要忘了關閉fds 0,1和2--這可能會讓事情變得混亂。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的在linux中查找运行程序句柄,如何查找我的进程在Linux中打开的文件句柄?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flyme9.2稳定版终于适配魅族18系
- 下一篇: 硬件狗狗3.0新版发布:支持Win11兼