Apakah Windows menangani penutupan soket saat proses keluar?


Jawaban:


10

Pada Windows dan Unixen, ketika sebuah proses keluar dari kernel, tutup semua handle yang terbuka.

Windows NT

Mengakhiri Proses - MSDN

Menghentikan suatu proses memiliki hasil sebagai berikut:

  • [...]
  • Setiap sumber daya yang dialokasikan oleh proses dibebaskan.
  • Semua objek kernel ditutup.
  • [...]

Sementara pegangan terbuka ke objek kernel ditutup secara otomatis ketika proses berakhir, objek itu sendiri ada sampai semua pegangan terbuka untuk mereka ditutup. Oleh karena itu, objek akan tetap valid setelah proses yang menggunakannya berakhir jika proses lain memiliki pegangan terbuka untuk itu.

ExitProcessfungsi - MSDN

Keluar dari proses menyebabkan hal berikut:

  • [...]
  • Semua pegangan objek yang dibuka oleh proses ditutup.
  • [...]

Linux

exit(3) - Manual Programmer Linux (fungsi libc)

Semua aliran stdio terbuka (3) memerah dan tertutup.

_exit(2) - Manual Programmer Linux (kernel syscalls)

Fungsi ini _exit()menghentikan proses panggilan "segera". Deskriptor file terbuka yang termasuk dalam proses ditutup; anak-anak dari proses ini diwarisi oleh proses 1, init , dan orang tua proses dikirim sinyal SIGCHLD.


Perhatikan bahwa pada kedua sistem operasi,

  1. Soket hanya satu jenis deskriptor file (fd) / objek kernel, jadi hal di atas berlaku sama untuk file dan soket.

  2. Deskripsi file pada Unix, serta objek yang menangani objek kernel pada Windows, dapat dimiliki oleh beberapa proses - mereka menangani mereka dapat diwarisi oleh proses anak dan bahkan diteruskan menggunakan fungsi IPC khusus.

  3. File atau soket hanya ditutup ketika semua fd yang menunjuk padanya dihancurkan.


2
Soket TCP adalah kasus khusus, karena status TIME_WAIT mereka. Misalnya, jika Anda menghentikan aplikasi yang mendengarkan pada port TCP, Anda seringkali tidak dapat langsung mengikat ke port yang sama.
haimg

2
Tidak. File deskriptor dan handle objek dimiliki dan dapat diakses hanya oleh satu proses, dan merupakan entitas per proses yang ketat . Ini adalah deskripsi file dan objek yang mendasari yang dibagikan di antara proses.
JdeBP

5

Pada Windows, soket adalah tautan antara titik akhir komunikasi dan suatu proses. Inilah sebabnya, ketika Anda menduplikasi soket, Anda berakhir dengan dua soket tetapi hanya satu titik akhir. Inilah sebabnya mengapa Anda tidak dapat melewatkan soket dari satu proses ke proses lainnya tanpa membuat soket baru di proses lainnya.

Jika proses tidak ada lagi, soketnya tidak ada lagi. Tidak ada konsep soket tanpa proses untuk menahannya. Inilah sebabnya mengapa pengandar kernel Windows yang ingin membuat soket di tingkat kernel harus menentukan proses untuk memiliki soket atau memanggil fungsi dari konteks proses yang dapat memiliki soket. (Atau mereka dapat memanipulasi titik akhir secara langsung tanpa menggunakan soket.)

Pertanyaan Anda tampaknya bukan tentang soket tetapi tentang titik akhir komunikasi itu sendiri. Soket memiliki referensi ke titik akhir komunikasinya. Ketika soket hilang, jumlah referensi turun. Jika mencapai nol, itu akan dihapus segera setelah diizinkan mengingat persyaratan protokol komunikasi yang dikaitkan dengan titik akhir. TCP memiliki status TIME_WAIT di mana titik akhir harus disimpan untuk menangani paket "sisa".


3

Ya itu. Telah cara ini merasakan windows 3.1 95 98 XP (Setidaknya saya tahu pasti sejak XP).


1
Tidak, belum. Sejak Windows NT versi 3. 5 , mungkin. Tapi DOS-Windows adalah binatang yang sangat berbeda dengan Windows NT ketika datang ke soket; dan DOS-Windows 95 berbeda dari DOS-Windows 3.1 secara signifikan. Aplikasi Win16 diminta untuk memanggil WSACleanup()jika tidak terjadi kebocoran; dan ada masalah buruk di DOS-Windows 9x, yang didokumentasikan dalam artikel MSKB # 156319, dengan proses induk yang membatalkan soket yang diberikan kepada anak-anak mereka, yang disebabkan oleh proses semantik keluar DOS-Windows yang agak berbeda untuk soket.
JdeBP

1
@ JdeBP: Bagaimana dengan Windows NT 3. 1 - apakah ia melakukan pembersihan otomatis?
user1686

1
3.1 tidak memiliki soket di tempat pertama.
JdeBP

... Poin bagus, @JdeBP - Saya tidak memikirkan itu.
user1686

@ JdeBP Jawaban yang diperbarui untuk memperbaikinya.
Scott Chamberlain
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.