从.net-core工具中删除子进程

时间:2019-01-21 15:03:25

标签: c# linux ubuntu unix .net-core

我有一个运行ssh命令的工具,因此我可以通过反向ssh连接到linux pc。当我要更新用.Net Core 2.1编写的工具时,更新程序将停止该工具的进程并更新文件。但是通过停止工具,以Process.Start()开始的ssh进程也将被关闭,因为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

1 个答案:

答案 0 :(得分:0)

对我有用的东西

 [DllImport("libc")]
 private static extern int system(string exec);
 
 system($"nohup {command} >/dev/null 2>&1 &");

信息:systemnohup