İşlemler çıktığında Windows kapanma yuvalarıyla ilgileniyor mu?


12

Linux ile ilgili bu soruyu okudum , İşlem sona erdiğinde bir bağlantı noktası bağlanabilir mi?
Linux, işlemlerden çıkıp açık yuvalar bıraktıktan sonra temizleniyor gibi görünüyor. Bunun Windows'ta nasıl çalıştığına dair herhangi bir spesifikasyon olup olmadığını merak ediyordum. İşletim sistemi sürekli olarak kapanmadan çıkan işlemler için prizlerle ilgileniyor mu?

Yanıtlar:


10

Hem Windows hem de Unixen'de, bir işlem çekirdekten çıktığında tüm açık tanıtıcıları kapatır.

Windows NT

İşlemi Sonlandırma - MSDN

Bir işlemi sonlandırmanın şu sonuçları vardır:

  • [...]
  • Süreç tarafından tahsis edilen kaynaklar serbest bırakılır.
  • Tüm çekirdek nesneleri kapalı.
  • [...]

Bir işlem sona erdiğinde, çekirdek nesnelerine yönelik açık tutamaçlar otomatik olarak kapatılırken, nesnelerin kendilerine açık olan tüm tutamaçlar kapatılana kadar kendileri var olurlar. Bu nedenle, başka bir işlemin açık bir tutamacı varsa, nesneyi kullanan bir işlem sona erdikten sonra geçerli kalır.

ExitProcessişlevi - MSDN

Bir işlemden çıkmak aşağıdakilere neden olur:

  • [...]
  • İşlem tarafından açılan tüm nesne tutamaçları kapalıdır.
  • [...]

Linux

exit(3) - Linux Programcı El Kitabı (libc fonksiyonları)

Tüm açık stdio (3) akışları yıkanır ve kapatılır.

_exit(2) - Linux Programcı El Kitabı (çekirdek sistem çağrıları)

Fonksiyon _exit()çağrı işlemini "hemen" sonlandırır. İşleme ait tüm açık dosya tanımlayıcıları kapalıdır; sürecin alt çocukları süreç 1, init tarafından miras alınır ve sürecin ebeveynine bir SIGCHLD sinyali gönderilir.


Her iki işletim sisteminde de,

  1. Yuvalar yalnızca bir tür dosya tanımlayıcı (fd) / çekirdek nesneleridir, bu nedenle yukarıdaki dosyalar ve yuvalar için eşit olarak geçerlidir.

  2. Dosya Unix üzerinde açıklamaları yanı sıra nesne tutamak Windows üzerinde çekirdek nesneler, sahip olabileceği birden süreçlere - onlar sapları alt süreçler miras ve hatta özel IPC işlevleri kullanarak etrafında geçirilebilir.

  3. Bir dosya veya soket yalnızca ona işaret eden tüm diskler yok edildiğinde kapatılır .


2
TCP soketleri, TIME_WAIT durumları nedeniyle özel bir durumdur. Örneğin, bir TCP bağlantı noktasında dinleme yapan bir uygulamayı sonlandırırsanız, genellikle aynı bağlantı noktasına hemen bağlanamazsınız.
12'de

2
Hayır. Dosya tanımlayıcıları ve nesne tutamaçları yalnızca tek bir işleme aittir ve bunlara erişilebilirdir ve yalnızca işlem başına varlıklardır. Öyle dosya açıklaması ve süreçler arasında paylaşılır yatan nesne.
JdeBP

5

Windows'ta soket, iletişim uç noktası ile işlem arasındaki bağlantıdır. Bu nedenle, bir soketi çoğalttığınızda, iki soketle, ancak yalnızca bir uç nokta ile sarılırsınız. Bu nedenle, diğer süreçte yeni bir yuva oluşturmadan bir işlemi bir işlemden diğerine geçiremezsiniz.

Süreç varolmazsa, soketleri mutlaka varolmaz. Tutma işlemi olmayan bir soket kavramı yoktur. Bu nedenle , çekirdek düzeyinde yuva oluşturmak isteyen Windows çekirdek sürücülerinin bile , sokete sahip olmak veya sokete sahip olabilecek bir işlem bağlamından işlevi çağırmak için bir işlem belirtmesi gerekir. (Veya uç noktaları doğrudan soket kullanmadan değiştirebilirler.)

Sorunuz gerçekten soketlerle ilgili değil, iletişim uç noktalarının kendileriyle ilgili gibi görünüyor. Bir soketin iletişim uç noktasına bir referansı vardır. Soket gittiğinde, referans sayısı düşer. Sıfıra isabet ederse, bitiş noktasının ilişkili olduğu iletişim protokolünün gereklilikleri göz önüne alındığında, izin verilir verilmez kaldırılır. TCP'nin TIME_WAIT durumu vardır ve bu sırada uç nokta "kalan" paketleri işlemek için saklanmalıdır.


3

Evet öyle. Bu şekilde algılama windows 3.1 95 98 XP (En azından XP beri kesin biliyorum).


1
Hayır, olmadı. Belki de Windows NT sürüm 3. 5 . Ancak DOS-Windows, yuvalara geldiğinde Windows NT'den çok farklı bir hayvandı; ve DOS-Windows 95, DOS-Windows 3.1'den önemli ölçüde farklıydı. Win16 uygulamalarını çağırmak için gerekliydi , WSACleanup()aksi takdirde sızıntılar oldu; ve DOS-Windows 9x'te, MSKB makalesinde # 156319'da belgelenen kötü bir sorun vardı, üst süreçler DOS-Windows'un yuvalar için oldukça farklı işlem çıkış semantiklerinden kaynaklanan çocuklarına geçirilen yuvaları geçersiz kılıyor.
JdeBP

1
@JdeBP: Windows NT 3'e ne oldu? 1 - otomatik temizleme gerçekleştirdi mi?
user1686

1
3.1 ilk etapta soketler yoktu.
JdeBP

... Güzel bir nokta, @JdeBP - Bunu düşünmedim.
user1686

@JdeBP Düzeltmek için cevap güncellendi.
Scott Chamberlain
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.