Ich habe verwendet exec 3<>/dev/tcp/192.168.0.101/6435
, um eine TCP-Verbindung mit 192.168.0.101:6435 herzustellen. Und ich habe mit dem pipe
Befehl ein paar Nachrichten erhalten und auch gesendet .
Jetzt möchte ich die TCP-Verbindung beenden. Aber mit ss -anpet
kann ich sehen, dass Bash selbst diese Verbindung hält, ohne einen Kindprozess zu forken.
Ich habe versucht, die Signale 9 und 15 an den Bash-Prozess zu senden, aber wie Sie wissen, kann sich Bash nicht selbst töten.
Kann ich die TCP-Verbindung, die ich hergestellt habe, beenden, ohne die von mir verwendeten Punkte zu beenden (weder durch root beenden noch Strg + D senden)?
bash
mit dieser Shell töten ?bash
kann sich bestimmt selbst töten - obwohl das eigentlich nicht das ist, was du hier machen willst!pipe
Befehl eingehen, den Sie verwenden und den ich auf meinem System nicht finden kann? Von welchem Paketpipe
kommt das? Welche (Beispiel-) Parameter können Sie übergeben, um Daten über die/dev/tcp/...
Verbindung zu senden / empfangen ? Vielen Dank./dev/tcp
, auch nicht sich/dev/tcp
selbst finden . Es scheint jedoch eine spezielle Verwendung zu sein, mit der Sie Datenpipe
und diese Art von Dateien senden / empfangen können. Es wird gesagt, dass/dev/tcp/ip/port
für TCP-Verbindungen und/dev/udp/ip/port
für UDP-Pakete verwenden. Da mein Englisch nicht sehr gut ist, weiß ich nicht, wie ich es richtig erklären soll. Bitte zögern Sie nicht, die Frage zu bearbeiten und eine Antwort zu schreiben.pipe
Befehl, den Sie erwähnen. Ich sah mich umhttps://github.com/clsr/sedbot/blob/master/sedbot.bash
. Es gibt dort keinenpipe
Befehl. Es definiert zwei Funktionen:readmsg
undsendmsg
zum Lesen / Schreiben von / zur Verbindung.readmsg
wird verwendetIFS= read -r -u 3 -t "$READ_TIMEOUT" line
, um aus dem Dateideskriptor 3 in die Variable zu lesenline
, und wirdsendmsg
verwendetecho "$(date +%s.%N) >>> $line" >&4
, um in den Dateideskriptor 4 zu schreiben. Auf jeden Fall wird hierdurch die vollständige Methode verdeutlicht. Die "pipe
Befehls" -Erwähnung bleibt den Lesern immer noch ein Rätsel.Antworten:
Dieser Befehl hat die Verbindung zu Dateideskriptor 3 geöffnet. Um die Verbindung zu schließen, müssen Sie Dateideskriptor 3 schließen.
quelle
shutdown(3)
Aufruf oder nurclose(2)
den Dateideskriptor tun ?close
, ist abershutdown
nicht richtiger als nah.shutdown
Die einzige echte Verwendung ist, wenn Sie nur eine Seite einer Duplex-Steckdose schließen möchten.shutdown
sendet eine FIN, während aclose
eine RST sendet. Dies sind materiell verschiedene Dinge.select()
, und ich glaube nicht, dass Bash eine der beiden Optionen bietet.