2 回答

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個贊
假設(shè)您的操作系統(tǒng)是現(xiàn)代多用戶操作系統(tǒng),則不存在退出進(jìn)程而不關(guān)閉通道、文檔、文件描述符的風(fēng)險,這將使資源處于未關(guān)閉狀態(tài)。用戶空間進(jìn)程擁有的所有資源在進(jìn)程退出時由操作系統(tǒng)適當(dāng)處理(即,如果需要,則關(guān)閉1)。
這適用于用戶進(jìn)程是運(yùn)行 Java 應(yīng)用程序的 JVM 以及任何其他類型的用戶進(jìn)程。
1 - 這比“一切都已關(guān)閉”要復(fù)雜一些。例如,在 UNIX/Linux 中,子進(jìn)程可以從其父進(jìn)程繼承打開的“文件”句柄,因此可以想象兩個或多個用戶進(jìn)程可以共享一個網(wǎng)絡(luò)套接字。操作系統(tǒng)將使用引用計(jì)數(shù)處理這種情況。

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個贊
當(dāng)您的進(jìn)程終止并且所有進(jìn)程的資源將被釋放時,套接字將自動關(guān)閉。
但是如果這是一個 TCP 套接字,那么發(fā)生這種情況時一般不會通知另一端。就像有人拔掉了網(wǎng)線一樣。
如果您在同一臺機(jī)器上的進(jìn)程之間進(jìn)行通信,那么您可能希望改用管道,當(dāng)您的一端自動關(guān)閉時,它會向另一端提供可靠的通知。
如果您想生成一個進(jìn)程并在父進(jìn)程宕機(jī)時讓它死掉,我建議為此使用一個未命名的管道到子進(jìn)程 stdin。這是最簡單的事情,而且非常可靠。
添加回答
舉報