linux 当dotnet项目关闭时不要杀死进程

iyr7buue  于 2023-08-03  发布在  Linux
关注(0)|答案(1)|浏览(222)

我正在为Linux系统(debian)开发一个dotnet应用程序。我想从我的应用程序在Linux上运行命令。我正在使用此方法运行命令。如果可能的话,我真的不想改变它。

public static async Task<Process> RunCommandAsync(string command)
{
    string cmd = command.Replace("\"", "\\\"");
    Process process = new()
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "/bin/bash",
            Arguments = $"-c \"{cmd}\"",
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false,
            CreateNoWindow = true,
        }
    };
    process.Start();
    await process.WaitForExitAsync();
    return process;
}

字符串
我的目标是在项目中启动一个进程,而不是在关闭项目时杀死它。我只想使用一个命令。我尝试了类似于sudo nohup sh -c 'ping google.com' > /dev/null &的东西,我认为这会起作用,但当我关闭项目时,进程也终止了。
简而言之,在这个例子中,我想在关闭项目后继续ping。

编辑1

这里,为了简单起见,我给出了一个ping的例子。实际上,应用程序是在一个Debian软件包中,并且有两个应用程序同时运行,都是作为服务。在某些时候,我想卸载应用程序,这将停止这两个服务。我先停止负责此的服务,然后其他服务永远不会停止,应用程序无法正确卸载。

wwwo4jvm

wwwo4jvm1#

我找到了解决办法。我创建了一个服务(finish.service),如下所示:

[Unit]
Description=Uninstall app1 and install app2  

[Service]
Type=oneshot
ExecStart=/opt/finish/finish.sh
WorkingDirectory=/opt/finish/
StandardOutput=journal
StandardError=journal

字符串
其中“/opt/finish/finish.sh“:(简化代码)

#!/bin/bash

sudo apt purge app1;
sudo apt install app2;


在我的应用程序中,当我想卸载它并安装一个新的时,我只需调用

sudo systemctl start finish.service

相关问题