Я использовал exec 3<>/dev/tcp/192.168.0.101/6435
для установления соединения TCP с 192.168.0.101:6435. И я получил, а также отправил несколько сообщений с pipe
командой.
Теперь я хочу разорвать соединение TCP. Но, как ss -anpet
я вижу, bash сам удерживает эту связь, не разветвляя дочерний процесс.
Я пытался послать сигнал 9 и 15 процессу bash, но, как вы знаете, bash не может убить себя.
Итак, могу ли я разорвать установленное мною TCP-соединение, не прерывая те точки, которые я использую (ни убивая его root, ни отправляя Ctrl + D)?
bash
?bash
конечно, может убить себя - хотя это на самом деле не то, что вы хотите сделать здесь!pipe
команде, которую вы используете, и которую я не могу найти в моей системе? Из какой упаковкиpipe
поступает? Какие (примерные) параметры вы можете передать ему для отправки / получения данных по/dev/tcp/...
соединению? Благодарю./dev/tcp
, даже не могу найти/dev/tcp
себя. Но, кажется, это специальное использование, с которым вы можете отправлять / получать данныеpipe
и файлы такого типа. Говорят, что использовать/dev/tcp/ip/port
для tcp-соединений и/dev/udp/ip/port
для пакетов udp. Поскольку мой английский не очень хорош, я не знаю, как это правильно объяснить. Пожалуйста, не стесняйтесь редактировать вопрос и опубликовать ответ.pipe
команде, которую вы упоминаете. Я посмотрел наhttps://github.com/clsr/sedbot/blob/master/sedbot.bash
. Там нетpipe
команды там. Он определяет две функции:readmsg
иsendmsg
для чтения / записи из / в соединение соответственно.readmsg
используетIFS= read -r -u 3 -t "$READ_TIMEOUT" line
для чтения из файлового дескриптора 3 в переменнуюline
иsendmsg
используетecho "$(date +%s.%N) >>> $line" >&4
для записи в файловый дескриптор 4. В любом случае, это проясняет полный метод.pipe
Упоминание о « команде» до сих пор остается загадкой для читателей.Ответы:
Эта команда открыла соединение по файловому дескриптору 3. Поэтому, чтобы закрыть соединение, вам необходимо закрыть файловый дескриптор 3. Для этого:
источник
shutdown(3)
вызов или простоclose(2)
дескриптор файла?close
, ноshutdown
не более правильно, чем близко.shutdown
Единственное реальное использование - это когда вы хотите закрыть только одну сторону дуплексного сокета.shutdown
отправляет FIN, аclose
отправляет RST. Это материально разные вещи.select()
, и я не верю, что bash предоставляет какой- либо вариант.