Sie können auf jeden Fall fd's von anderen laufenden Prozessen schließen, solange Sie dazu berechtigt sind.
Finde zuerst die PID.
Starten Sie dann gdb und fügen Sie dem Prozess Folgendes hinzu:
%Vor%Rufen Sie dann den Systemabschlussanruf für das fd, das Sie schließen möchten, auf:
%Vor%Wenn der Dateideskriptor durchgesickert ist, wird das Programm niemals versuchen, es erneut zu verwenden, und es sollte keine Probleme verursachen. Das Programm hat jedoch wahrscheinlich einen Fehler.
Sie können eine FD n
des aktuellen Prozesses in bash wie folgt schließen:
Ich bin in einer ähnlichen Situation gelandet, aber wo gdb
keine Option war, da es die Echtzeitbeschränkungen meiner Anwendung unterbrach und meinen Test verzerrte.
Also habe ich eine schnelle iptables
-Regel erstellt. Optionale Argumente, die in eckige Klammern gesetzt werden ( [ opt ]
) .
Suchen Sie nach Zieladresse und Port :
netstat --program [ --numeric-host --numeric-ports ] | grep [<pid>]/[<appname>]
Hier möchte ich 10.56.4.79:57000
abschneiden.
Erstellen Sie eine iptables
-Regel zum Ausschneiden des Sockets :
iptables -A OUTPUT [ --out-interface <if> --protocol <tcp|udp|unix> ] --destination <addr> --dport <port> --jump DROP
In diesem Stadium kann Ihr Programm keine Pakete an den entfernten Host senden. In den meisten Fällen ist die TCP-Verbindung geschlossen . Sie können mit Ihren Tests fortfahren, wenn es welche gibt.
%Vor% Entfernen Sie die Regel iptables
:
Sie geben einfach die gleiche iptables
Regel ein und ersetzen dabei A
durch D
.
Sie können nicht einfach die Dateideskriptoren anderer Prozesse schließen und erwarten, dass sie weiter funktionieren.
Fix das Programm, das zu viele Dateien geöffnet hat, um es weniger zu öffnen. Dies kann eine Konfigurationsänderung sein oder die Quelle ändern usw. Sie können nicht einfach die Dateien dafür schließen.
Tags und Links linux shell file-descriptor