Użyłem exec 3<>/dev/tcp/192.168.0.101/6435
do ustanowienia połączenia TCP z 192.168.0.101:6435. I otrzymałem, a także wysłałem kilka wiadomości z pipe
poleceniem.
Teraz chcę zakończyć połączenie TCP. Ale ss -anpet
widzę, że sama bash utrzymuje to połączenie, bez rozwodzenia procesu potomnego.
Próbowałem wysłać sygnał 9 i 15 do procesu bash, ale jak wiadomo, bash nie może się zabić.
Czy mogę zatem zakończyć nawiązane połączenie TCP bez przerywania używanych przeze mnie pkt. (Nie zabijając go przez root, ani wysyłając Ctrl + D)?
bash
tą skorupą?bash
z pewnością może się zabić - choć tak naprawdę nie chcesz tego tutaj robić!pipe
polecenie, którego używasz, a którego nie mogę znaleźć w moim systemie? Z której paczkipipe
pochodzi? Jakie (przykładowe) parametry możesz mu przekazać, aby wysłać / odebrać dane przez/dev/tcp/...
połączenie? Dzięki./dev/tcp
, nawet nie mogę się znaleźć/dev/tcp
. Ale wydaje się, że jest to specjalne zastosowanie, za pomocą którego można wysyłać / odbierać danepipe
i tego rodzaju pliki. Mówi się, że używa się go/dev/tcp/ip/port
do połączeń tcp i/dev/udp/ip/port
pakietów udp. Ponieważ mój angielski nie jest zbyt dobry, nie wiem, jak go poprawnie wyjaśnić. Edytuj pytanie i opublikuj odpowiedź.pipe
polecenia. Spojrzałem nahttps://github.com/clsr/sedbot/blob/master/sedbot.bash
. Tam nie mapipe
polecenia. Definiuje dwie funkcje:readmsg
i odpowiedniosendmsg
do odczytu / zapisu z / do połączenia.readmsg
używaIFS= read -r -u 3 -t "$READ_TIMEOUT" line
do odczytu z deskryptora pliku 3 do zmiennejline
isendmsg
używaecho "$(date +%s.%N) >>> $line" >&4
do zapisu do deskryptora pliku 4. W każdym razie wyjaśnia to pełną metodę. Wspomnienie o „pipe
rozkazie” wciąż pozostaje tajemnicą dla czytelników.Odpowiedzi:
To polecenie otworzyło połączenie na deskryptorze pliku 3. Aby zamknąć połączenie, musisz zamknąć deskryptor pliku 3. Aby to zrobić:
źródło
shutdown(3)
wywołanie, czy tylkoclose(2)
deskryptor pliku?close
, aleshutdown
nie jest bardziej właściwe niż zamknięcie.shutdown
Jedynym faktycznym zastosowaniem jest zamknięcie jednej strony gniazda dupleksu.shutdown
wysyła FIN, aclose
RST. To są materialnie różne rzeczy.select()
i nie sądzę, aby bash zapewniał taką opcję.