我正在为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软件包中,并且有两个应用程序同时运行,都是作为服务。在某些时候,我想卸载应用程序,这将停止这两个服务。我先停止负责此的服务,然后其他服务永远不会停止,应用程序无法正确卸载。
1条答案
按热度按时间wwwo4jvm1#
我找到了解决办法。我创建了一个服务(finish.service),如下所示:
字符串
其中“/opt/finish/finish.sh“:(简化代码)
型
在我的应用程序中,当我想卸载它并安装一个新的时,我只需调用
型