Ölü süreç tarafından açık tutulan bir limanı nasıl serbest bırakırsınız?


63

Bir meslektaşım yakın zamanda, sözde öldüğü bir sürecin hala bir ağ bağlantı noktasına bağlı olduğu ve diğer işlemlerin o bağlantı noktasına bağlanmasını önlediği için bir sorunla karşılaştı. Özellikle, PID 4476 ile netstat -a -badlandırılan bir işlemin System, en azından söyleyebileceğim kadarıyla, PID 4476 ile işlem yapılmadığı sürece, 60001 numaralı limanın açık olduğunu bildiriyordu.

İşlem Gezgini ve Görev Yöneticisi, PID 4476'yı listelememiştir ( SystemPID 4 ile adlandırılan ve 60001'i içermeyen kendi TCP bağlantı kümesine sahip başka bir işlem olmasına rağmen ). taskkill /PID 4476ayrıca PID 4476'nın bulunamadığını bildirmiştir.

Şu anda bağlı olduğu limanı serbest bırakmak için bu gizemli Sistem sürecini öldürmenin bir yolu var mı? Bunun olmasına ne sebep olabilir? Görev Yöneticisi'nin, İşlem Gezgini'nin ve görev kimliğinin hiçbirinin bilmediği işlemler nasıl olabilir? Yeniden başlatma işlemi sorunu çözmeyi başardı, ancak bunu yeniden başlatmadan düzeltmenin bir yolu olup olmadığını bilmek istiyorum.


Limanın serbest bırakılıp bırakılmadığını görmek için ne kadar beklediniz? Bağlantı (port) hangi durumdaydı? Kuruldu, Kapatıldı, Time_Wait?
joeqwerty

@joeqwerty: En az 15-20 dakika bekledik. Maalesef bağlantının hangi durumda olduğunu / =.
Adam Rosenfield

20 dakika ses gibi bir sorun. Bir dahaki sefere gerçekleştiğinde netstat'ı çalıştırın ve bağlantının durumunu kontrol edin, bu size olan bitenlerle ilgili bir ipucu verecektir. Ancak mfinni'nin cevabına yorum yaptığınız gibi, yazılım \ servisinizin çökmesinden kaynaklanıyor olabilir.
joeqwerty

Yanıtlar:


58

Bunun eski bir konu olduğunu biliyorum, ama başka birinin de aynı sorunu yaşaması durumunda ...

Gerçekleşebilecek olan şey, işleminizin açıkça kapatılmadan kilitlendiğinde veya başka bir şekilde çıkıldığında açık bir TCP bağlantı noktası olmasıdır. Normal olarak, işletim sistemi bu tür şeyleri temizler, ancak yalnızca işlem kaydı gittiğinde. İşlem artık çalışıyor gibi görünmese de, PID'sinin tekrar kullanımını önlemek için, kaydını tutabilecek en az bir şey var. Bu ebeveynden ayrılmayan bir çocuk sürecinin varlığıdır.

Programınız çalışırken herhangi bir işlem ortaya çıkarsa, onları öldürmeyi deneyin. Bu, işlem kaydının serbest bırakılmasına ve TCP portunun temizlenmesine neden olmalıdır. Görünüşe göre Windows bunu beklediğim gibi işlem çıktığında kayıt serbest bırakıldığında yapar.


1
Teşekkürler, efendim Bu sorunun çok düşük olduğuna inanamıyorum, özellikle de google sorgusu bu durumda yardımcı olmayan "TCPView / use netstat & taskkill" yanıtlarıyla dolu olduğu için. Benim durumumda yardımcı olan, ProcessExplorer'ı çalıştırmak ve artık sahip olunan herhangi bir işlemi aramaktı. Bunları kapatmak, sorunu çözdü.
gwiazdorrr

3
İpucunuz için teşekkürler !! Yetimhanenin öldürülmesi süreci gerçekten sorunu çözdü.
Darkthread

Teşekkürler!! Bu tam olarak başıma gelen şeydi. Artık işlemi öldürdüm ve liman serbest bırakıldı. Proses gezginini kullanarak artık süreçleri nasıl arayacağımı bilmiyorum, ama ortaya çıkan süreçlerin adlarını biliyordum, bu yüzden bulması kolaydı.
Grezzo

1
Aynı sorunu yaşadık - ve Process Explorer'ı kullanarak, Dr. Watson'ın eski PID'yi elinde tuttuğunu gördüm. Hizmetin açmaya çalıştığı bağlantı noktasını aradık (Bul) ve Dr. Watson ve kullandıkları PID için 3-4 giriş gördük. Garip bir şekilde, hiçbir şeyi Öldürmek zorunda değildik. Bu süreç 'uyandı' gibi görünüyor ve ortadan kayboldu. Bir dahaki sefere hizmeti yeniden başlatmaya çalıştım, iyi geldi.
tresstylez

VS ile hata ayıklama sırasında da benzer sorunlar yaşanabilir. İşlem sürecine VS ekliyorum ve bazı döngülerden sonra - açıklanan durum gerçekleşiyor, ancak işlemlerim (çocuklar dahil) ayrılmıyor. Ama "vsjitdebugger" öldürmek yardımcı olur.
Dmitry Azaraev,

6

TCPView'ü kullanmayı ve bağlantıyı kapatmayı denediniz mi? Anlattığınız senaryoda bağlantıyı gösterip göstermeyeceğini bilmiyorum, çünkü bana hiç olmadı. Ama bu tekrar olursa, aklıma gelen tek şey bu.

Süreç neydi - ticari bir yazılım mı yoksa ev yapımı bir şey mi? Görünüşe göre liman 60001 bazı Truva atları tarafından kullanılıyor - Bir rootkit olabilir mi yoksa işletim sisteminden kendini gizleyebilecek bir şey olabilir mi? Bu makineye AV ile bir kez daha iyi bir sonuç vermek isteyebilirsiniz, belki önyüklenebilir medyadan bir şeyler.


Hayır, TCPView'ü denemedik; Eğer bir daha olursa, bunu gelecek için aklımda tutacağım. Yazılım, bağlantı noktası 60001 kullanan şirket içi yazılımımızdır - Bağlantı noktasını açık tutma işleminin bir şekilde tam olarak ölmeyen yazılımımızın eski bir örneği olduğundan neredeyse eminim. Bu, yazılımın başka bir kopyasının başlatılmasını engelledi.
Adam Rosenfield

Uygulamanız, bağlamadan önce soketin SO_REUSEADDR seçeneğini true olarak ayarlayabilir. Bu sizin probleminizi çözmelidir (* nix için daha da fazla zorunludur)
Stephane

3

Komut istemini yönetici olarak aç

  1. C: \ WINDOWS \ system32> netstat -ano | findstr: 7895

*** Artık çocuk işlemesi gerçekleşmeyene kadar 2. adımı tekrarlayın

  1. C: \ WINDOWS \ system32> wmic işlemi nerede (ParentProcessId = 1091) Caption, ProcessId alıyor

    Başlık İşlemi Kimliği

    cmd.exe 1328

2.a. C: \ WINDOWS \ system32> wmic işlemi nerede (ParentProcessId = 1328) Caption, ProcessId alıyor

  Caption  ProcessId

  conhost.exe  1128

2.b. başka çocuk işlemi bulana kadar bunu tekrarla

- Öyleyse tüm çocuk süreçlerini öldür

  1. C: \ WINDOWS \ system32> taskkill / F / PID 1128 BAŞARI: PID 9500 ile işlem sonlandırıldı.

Wmic komutu, limanlarımızı açık tutan çocuk sürecini tanımlamanın tek yoluydu. Çok teşekkürler.
K Erlandsson

Bu aynı zamanda sorunumu çözmek için bulduğum tek yoldu. Ana süreç sona erdi ve çocuk süreci askıya alındı, ancak hala TCP portunu "Dinleme" durumunda tutuyordu. Teşekkür ederim.
Gui

1

Daha önce de aynı sorunla karşılaştım, netstat -a -n windows komutu işlem kimliği olan açık portların listesini verdi. Bundan sonra, bağlantıyı kapatmak istediğim bağlantı noktası numarasını aldım ve daha sonra TCPView yazılımını kullanarak bu bağlantıyı kapattım. Bu benim için çalıştı.


-4

Windows kullanıcısıysanız, aşağıdaki adımları izleyin: Adım 1: Bu yola gidin: Denetim Masası \ Tüm Denetim Masası Öğeleri \ Yönetimsel Araçlar

2. Adım: Servislere tıklayın

Adım 3: İstenilen portta çalışan istenmeyen servisleri durdurun.


-5

ps -ef | grep işlem adı

ilgili süreçleri öldürmek

öldürmek -9 pid pid

Benim durumumda çalıştı


6
Bu soru Windows hakkında değil, Linux hakkında
longneck
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.