Отключить дочерний процесс из .net-core tool - PullRequest
0 голосов
/ 21 января 2019

У меня есть инструмент, который запускает команду ssh, чтобы я мог подключиться к ПК с Linux через обратный ssh.Когда я хочу обновить свой инструмент, написанный на .Net Core 2.1, программа обновления остановит процесс инструмента и обновит файлы.Но при остановке инструмента процесс ssh, ранее запущенный с Process.Start(), также будет закрыт, так как процесс ssh является дочерним процессом инструмента.

Есть ли какой-нибудь способ «отключить» дочерний процесс ssh от моего инструмента, чтобы я не терял соединение во время работы программы обновления?

Запуск Ubuntu ...

C #:

case UssGatewayFunction.NPIConnectSSH:
    Log.Information("Connect to MyCompany via ssh");
    try
    {
        Process.Start("ssh", "-R 3521:localhost:22 -p 9450 myuser@1.2.3.4 sleep 30");
        response = new DefaultRes(true, UssGatewayFunction.NPIConnectSSH);
    }
    catch (Exception ex)
    {
        Log.Error($"Can't start ssh: {ex.Message}");
        response = new DefaultRes(false, UssGatewayFunction.NPIConnectSSH);
    }

Updater.sh:

systemctl stop gateway.service
if pgrep "gateway" >/dev/null 2>&1 ; then
        #here i loose the ssh connection
        pkill -x "init-gateway" || true
        pkill -x "gateway" || true
fi
#now just the extracting happens
...