У меня есть программа .NET (Edit: using MONO), назовите ее myfoo которая находится на моем удаленном сервере Ubuntu. Чтобы получить доступ к нему, я SSH в мой ящик (используя Wi-Fi, а не Ethernet). Моя оболочка bash запускается как обычно, я перехожу в каталог, а затем запускаю программу через mono myfoo . все это прекрасно работает.

К сожалению, у компании, где я работаю, есть некоторые довольно неприятные проблемы с Wi-Fi. Короткая версия заключается в том, что время от времени vpn вырубается, поэтому, пока мое устройство остается подключенным к Wi-Fi, все сетевое соединение разрывается с моим сервером.

Естественно, это заставляет мое устройство в конечном итоге понять, что соединение разорвано, и отображает традиционную ошибку разорванной трубы. Теперь вот проблема:

Когда я снова подключаюсь и снова запускаю myfoo, он не работает. Я отследил проблему до того факта, что при разрыве соединения bash не завершает предыдущий экземпляр myfoo. Я должен вручную убить предыдущий экземпляр перед запуском нового. По разным причинам это проблема. Я ожидал, что, когда связь разорвется, bash выйдет и, следовательно, убьет всех детей, которых он породил. Видимо, этого не происходит. Есть ли способ, которым я могу сделать это? Я бы предпочел не менять исходный код программы, но если мне нужно, чтобы перехватить прерывание или что-то, что я могу. Я бы предпочел, чтобы в настройках моего профиля bash было какое-то решение или что-то такое, что позволяло бы иметь такое поведение.

1 ответ1

1

Если вы используете OpenSSH, вы можете включить поддержку пакетов, которые будут обнаруживать сброшенное соединение и завершать сеанс ssh, вызывая выход bash:

ssh -o ServerAliveInterval=2

Это будет отправлять подтверждение активности каждый раз, когда проходят две секунды без каких-либо пакетов. Если пропущены три последовательных сообщения активности (можно изменить, установив -o ServerAliveCountMax=10), соединение будет закрыто.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .