/proc/pid/fd/
'da çok fazla dosya tanıtıcısı var. Bu dosya tanımlayıcılarını kapatmak için kabuk komutunu kullanabilir miyim?Linux kabuk komutuyla dosya tanımlayıcıyı kapatma
cevap
Çok olarak bash mevcut sürecin bir FD n
kapatabilirsiniz:
exec n<&-
Teşekkürler. Fakat mevcut sürecin FD'sini kapatmak için kullanılır (bash süreci). Belirli bir sürecin FD'sini kapatmak için herhangi bir yöntem biliyor musunuz? – Eric
Sadece diğer süreçler dosya tanımlayıcıları kapanış dolaşmak ve çalışmaya devam etmelerini bekleyemeyiz.
Çok fazla açık olan programı, daha az açılacak şekilde açın. Bu, bir yapılandırma değişikliği veya kaynağın değiştirilmesi vb. Olabilir. Dosyaları bunun için kapatamazsınız.
Elbette yapabilirsin. Bunu yapmak isteyen ortak bir durum, programın fd'leri sızdırması; bu durumda asla bir daha kullanmaz. Elbette, bu bir böcek, ama hala etrafta çalışmak istemek için geçerli. –
Benim durumumda, uzun süredir asılı bir parti işlemim vardı çünkü bir http prizinden bir okur ölmüştü. @ThomasVanderStichele olarak fd'nin kapatılması benim için problemi çözdü :-) –
Yetkilendirmeleriniz olduğu sürece, diğer çalışan işlemlerin fd'lerini kesinlikle kapatabilirsiniz.
İlk önce PID'yi bulun. Dosya tanıtıcı bir sızdırıldı ise
(gdb) call close(999)
$1 = 0
: Kapatmak istediğiniz fd yakın sistem çağrısı, Sonra
gdb -p 1598
:
Sonra gdb başlatmak ve işleme ekleme Birincisi, program hiçbir zaman onu bir daha kullanmaya çalışmayacak ve herhangi bir sorun yaratmamalı. Ancak, programın büyük olasılıkla bir hatası vardır. Ben benzer bir durumda koştu ettik
, ama benim uygulamanın gerçek zamanlı kısıtları bozulur ve benim testi bozuk beri gdb
bir seçenek değildi nerede.
Hızlı bir iptables
kuralı ile geldim. İsteğe bağlı bağımsız değişkenler köşeli parantez içine yerleştirilir ([ opt ]
). Ben 10.56.4.79:57000
kesmek istiyorum, İşte
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
:
hedef adresi ve port bulun.
soketi kesmek için bir
iptables
Kural oluşturun: Bu aşamada Atiptables -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 $
, programınız uzak ana bilgisayara paketleri gönderemez. Çoğu durumda, TCP bağlantısı kapalıdır. Eğer varsa, testlere devam edebilirsiniz.
Sadece bir
D
tarafındanA
yerine aynıiptables
kuralı yazın:$ 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
kural çıkarın. o$ iptables -D OUTPUT --destination 10.56.4.79 --dport 57000 --jump DROP $
Amacım, uygulamanızın kritik bir hizmetle bağlantısını kaybederse nasıl tepki vereceğini test etmekti. – YSC
- 1. linux kabuk dosya boyutu
- 2. Linux Kabuk: VLC programlama
- 3. Linux kabuk komut dosyası awk komutu çok fazla açık dosya
- 4. Kapatma Windows makine linux terminalinden
- 5. Linux varsayılan dosya izni
- 6. Dizindeki Her Dosya İçin Linux Kabuk Betiği Dosya adını tut ve bir programı çalıştır
- 7. dquote> bir yürütme Linux kabuk
- 8. Kabuk sürümüm linux komutunu kullanarak nasıl bulunur?
- 9. Dosyayı curl komutuyla belirli bir klasöre kaydedin
- 10. PHP kapatma: Dosya yazılamıyor mu?
- 11. Django - Disqus benzersiz tanımlayıcıyı tanımıyor
- 12. Linux için dosya erişim sayısı
- 13. Linux weka ve büyük dosya
- 14. Bash işlevi su komutuyla çalışan
- 15. Bir Web sitesinden XML Dosya Verilerini Kapatma
- 16. "screen" komutuyla çıkış yönlendirmesi
- 17. ls komutuyla renklendirilmiş vurgulama
- 18. Çokgen komutuyla saydamlık
- 19. Linux -
- 20. Linux altında Python/GTK'da kullanıcı oturumu kapatma/kapatma - SIGTERM/HUP alınamadı
- 21. Linux Kabuk dizeleri analiz etme hakkında-tablolar halinde
- 22. Linux Kabuk Betiği: NFS Algılama Noktası (veya Sunucu) nasıl algılanır?
- 23. Linux kabuk komut dosyasındaki bir süreyi saniye cinsinden nasıl ölçebilirim?
- 24. , linux kabuk destek listesi veri yapısını yapıyor mu?
- 25. kabuk betiği nohup ile çalışmadı
- 26. Kabuk betiğine Canonical Time Zone adını alma
- 27. Paket tanımlayıcıyı Swift dilinde programlı olarak alın?
- 28. SQL Server: Saklı yordamından benzersiz tanımlayıcıyı döndür
- 29. kapatma -
- 30. - Linux
Hangi süreçtir? Bu senin programın mı? Bir kaynak gönderebilir misin? – MarkR