файлы устройства socat не удаляются при закрытии интерфейса

Я использую socat версии 1.7.3.2 для создания символьного устройства из устройства VLAN Ethernet для связи. Я создаю устройство, используя следующую команду:

socat INTERFACE:wwan0.vlan_dev1,type=2 PTY,mode=0777,rawer,link="/dev/ser_vlan0" &

Он создает файлы как:

/dev/ser_vlan0 -> /dev/pts/22

Даже после удаления устройства wwan0 файлы /dev/ser_vlan0 и /dev/pts/22 все еще существуют.

Есть ли способ автоматически удалить эти файлы, когда wwan0 больше не существует?


person Raj    schedule 23.06.2017    source источник
comment
Пока socat все еще работает?   -  person Azeem    schedule 28.06.2017
comment
да, socat все еще работает, но сетевое устройство пропало. Так может ли он автоматически очистить буфер и удалить устройство?   -  person Raj    schedule 29.06.2017
comment
Согласно документации, в некоторых случаях это так. Итак, /dev/ser_vlan0 — это фактический файл, а /dev/pts/22 — символическая ссылка, верно? Это то, для чего эта стрелка -> в вашем вопросе?   -  person Azeem    schedule 29.06.2017
comment
Самое близкое решение, которое вам нужно, это unlink-close. Можете ли вы проверить это и подтвердить?   -  person Azeem    schedule 29.06.2017
comment
Я пробовал с unlink-close, и это не работает. Socat некоторое время держит файл открытым. Сразу не убивается.   -  person Raj    schedule 29.06.2017
comment
Но, в конце концов, его убивают?   -  person Azeem    schedule 29.06.2017
comment
через некоторое время. Я не знаю, какое событие убивает его.   -  person Raj    schedule 29.06.2017
comment
Верно. Эта задержка может быть связана с timeout, т.е. 0.5 секундой. Из OPTIONS: -t<timeout>: Когда один канал достигает EOF, часть записи другого канала отключается. Затем socat ждет ‹timeout› [timeval] секунд перед завершением. По умолчанию 0,5 секунды. Этот тайм-аут применяется только к адресам, где части записи и чтения могут быть закрыты независимо. Когда во время тайм-аута считываемая часть выдает EOF, socat завершает работу, не дожидаясь тайм-аута.   -  person Azeem    schedule 29.06.2017
comment
Можете ли вы протестировать его с меньшим значением timeout?   -  person Azeem    schedule 29.06.2017
comment
Вы хотите сказать, что socat сам был killed?   -  person Azeem    schedule 29.06.2017
comment
Если socat завершается при отключении устройства, вы можете запустить его в цикле, как показано в этом сообщении: stackoverflow.com/questions/28032549/   -  person Azeem    schedule 29.06.2017
comment
Вариант, который вы указали -t 0, идеально подходит для меня. Пожалуйста, опубликуйте это как ответ. :)   -  person Raj    schedule 29.06.2017
comment
Окончательно! :) Конечно. Я публикую это как ответ. Я бы посоветовал вам обновить свой вопрос с помощью вашей последней команды, поскольку это поможет другим в будущем.   -  person Azeem    schedule 29.06.2017


Ответы (1)


Из OPTIONS:

-t ‹ время ожидания >:

Когда один канал достигает EOF, часть записи другого канала отключается. Затем socat ждет несколько секунд перед завершением. По умолчанию 0,5 секунды. Этот тайм-аут применяется только к адресам, где части записи и чтения могут быть закрыты независимо. Когда во время тайм-аута считываемая часть дает EOF, socat завершает работу, не дожидаясь тайм-аута.

Вам нужно установить timeout как 0.

person Azeem    schedule 29.06.2017