在/proc/pid/fd/
中,文件描述符太多。我可以使用shell命令關閉這些文件描述符嗎?如何通過Linux shell命令關閉文件描述符
回答
您可以在bash關閉當前程序的FD n
像這樣:
exec n<&-
謝謝。但它用於關閉當前進程的FD(bash進程)。你知道關閉特定過程的FD的方法嗎? – Eric 2011-05-13 08:07:52
你不能只是到處去關閉其他進程的文件描述符,並希望他們繼續工作。
修復打開了太多文件的程序,使其打開的次數減少。這可能是一個配置更改,或修改源等你不能只關閉它的文件。
當然可以。想要這樣做的一個常見情況是因爲程序泄漏了fd;在這種情況下,它不會再使用它們。當然,這是一個錯誤,但想要解決它仍然是有效的。 – 2012-08-21 15:10:26
在我的情況下,我有一個長時間運行的掛起批處理過程,因爲從http套接字讀取已經死亡。關閉fd作爲@ThomasVanderStichele描述爲我解決了這個問題:-) – 2015-03-31 00:45:15
只要您有權限,您就可以關閉其他正在運行的進程的fd。
首先找到PID。
然後,啓動gdb並且連接到進程:
gdb -p 1598
然後,打電話要關閉FD上的close系統調用:
(gdb) call close(999)
$1 = 0
如果文件描述符被泄露一個,那麼該程序將永遠不會再嘗試使用它,它不應該引起任何問題。然而,該程序很可能有一個錯誤。
我跑了類似的情況,但其中gdb
不是一個選項,因爲它破壞了我的應用程序的實時約束和扭曲我的測試。
所以我想出了一個快速iptables
規則。 將可選參數放在方括號內([ opt ]
)。
找到你的IP地址和端口:
netstat --program [ --numeric-host --numeric-ports ] | grep [<pid>]/[<appname>]
$ netstat --program --numeric-ports | grep 8812/ tcp 0 0 ysc.xxx:54055 10.56.1.152:30000 ESTABLISHED 8812/my-application tcp 0 0 ysc.xxx:46786 postgres.xxx:5432 ESTABLISHED 8812/my-application tcp 0 0 ysc.xxx:36090 10.56.4.79:57000 ESTABLISHED 8812/my-application ... unix 2 [ ] DGRAM 7177020 8812/my-application
在這裏,我想削減
10.56.4.79:57000
。創建
iptables
規則切斷插座:iptables -A OUTPUT [ --out-interface <if> --protocol <tcp|udp|unix> ] --destination <addr> --dport <port> --jump DROP
$ iptables -A OUTPUT --destination 10.56.4.79 --dport 57000 --jump DROP $
在這個階段,你的程序不能將數據包發送到遙遠的主機。在大多數情況下,TCP連接已關閉。如果有的話,你可以繼續進行測試。
$ netstat --program --numeric-ports | grep 8812/ tcp 0 0 ysc.xxx:54055 10.56.1.152:30000 ESTABLISHED 8812/my-application tcp 0 0 ysc.xxx:46786 postgres.xxx:5432 ESTABLISHED 8812/my-application ... unix 2 [ ] DGRAM 7177020 8812/my-application
取出
iptables
規則:您只需鍵入相同
iptables
規則由D
更換A
。$ iptables -D OUTPUT --destination 10.56.4.79 --dport 57000 --jump DROP $
請注意,我的意圖是測試如果我的應用程序如果失去與關鍵服務的連接,它將如何反應。 – YSC 2016-02-23 08:38:24
- 1. 關閉文件描述符
- 2. Adb shell命令描述
- 3. python關閉文件描述符問題
- 4. Logstash關閉文件描述符?
- 5. Linux open()文件描述符
- 6. Linux內核 - 套接字文件描述符關閉位置
- 7. Linux的wc命令和文件描述符
- 8. 關閉原始文件描述符後,重複的描述符文件是否關閉?
- 9. 複製文件失敗,EBADF關閉輸出文件描述符
- 10. 關閉文件指針而不關閉底層文件描述符
- 11. 的Python:關閉文件描述符daemonizing過程
- 12. 通過文件描述符 - Execve(typecast)
- 13. 如何在python中關閉文件描述符?
- 14. 如何枚舉文件描述符? (叉後關閉它們)
- 15. 文件描述符未在exec上關閉
- 16. 從文件描述符重命名?
- 17. 執行ioctl時關閉文件描述符
- 18. 關閉正在輪詢的文件描述符
- 19. 文件描述符飢餓和阻斷文件描述符
- 20. Linux文件描述符日誌
- 21. Linux文件描述符表和vmalloc
- 22. Linux Socket文件描述符與線程
- 23. Epoll_wait在關閉的文件描述符上返回事件
- 24. 執行描述shell命令的字符串數組
- 25. 進程在Linux中終止時文件描述符是否關閉?
- 26. 在子進程中關閉已打開的文件描述符
- 27. 關閉log4j記錄器以釋放文件描述符
- 28. 如何通過int描述符找出文件名? (或「?可我..」)
- 29. 錯誤的文件描述符關閉Boost套接字
- 30. 瞭解dup2和關閉文件描述符
哪個過程是?它是你的程序嗎?你能發佈一些信息來源嗎? – MarkR 2011-05-14 06:53:24