So schließen Sie den Dateideskriptor über den Linux Shell-Befehl

7

In /proc/pid/fd/ gibt es zu viele Dateideskriptoren. Kann ich den shell-Befehl verwenden, um diese Dateideskriptoren zu schließen?

    
Eric 13.05.2011, 06:00
quelle

4 Antworten

24

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.

    
Thomas Vander Stichele 21.08.2012 15:12
quelle
4

Sie können eine FD n des aktuellen Prozesses in bash wie folgt schließen:

%Vor%     
Ignacio Vazquez-Abrams 13.05.2011 06:03
quelle
2

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 ] ) .

  1. Suchen Sie nach Zieladresse und Port :

    netstat --program [ --numeric-host --numeric-ports ] | grep [<pid>]/[<appname>]

    %Vor%

    Hier möchte ich 10.56.4.79:57000 abschneiden.

  2. 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

    %Vor%
  3. 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%
  4. Entfernen Sie die Regel iptables :

    Sie geben einfach die gleiche iptables Regel ein und ersetzen dabei A durch D .

    %Vor%
YSC 23.02.2016 08:36
quelle
0

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.

    
MarkR 14.05.2011 06:53
quelle

Tags und Links