Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从.Net内核独立于主进程linux c运行bash#_C#_Linux_Bash_.net Core - Fatal编程技术网

C# 从.Net内核独立于主进程linux c运行bash#

C# 从.Net内核独立于主进程linux c运行bash#,c#,linux,bash,.net-core,C#,Linux,Bash,.net Core,我有一个服务,它需要独立于.Core进程执行更新的shell脚本。我尝试过/bin/bash、/bin/nohup和/bin/setsid。但每次脚本停止systemd服务时,脚本似乎也会停止。我怎样才能独立 private static Process StartLinuxUpdateScript(string pathToUpdateScript, string pathToUpdateZip) { var process = new Process()

我有一个服务,它需要独立于.Core进程执行更新的shell脚本。我尝试过/bin/bash、/bin/nohup和/bin/setsid。但每次脚本停止systemd服务时,脚本似乎也会停止。我怎样才能独立

private static Process StartLinuxUpdateScript(string pathToUpdateScript, string pathToUpdateZip)
    {
        var process = new Process()
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "/bin/setsid",
                UseShellExecute = true,
                Arguments = $" bash {pathToUpdateScript} {pathToUpdateZip}"
            }
        };
        return process;
    }
也许这会有帮助:

 public void RunProcess(string fileName, string arg)
        {
            var process = new Process
            {
                StartInfo =
                {
                    RedirectStandardOutput = true,
                    RedirectStandardError = true,
                    FileName = fileName,
                    Arguments = arg ,
                    UseShellExecute = false,
                    CreateNoWindow = true
                },
                EnableRaisingEvents = true
            };

            process.Start();
            string processOutput; 
            while ((processOutput = process.StandardError.ReadLine()) != null)
            {
                Console.WriteLine(processOutput);
            }

            process.Dispose();
        }
也许这会有帮助:

 public void RunProcess(string fileName, string arg)
        {
            var process = new Process
            {
                StartInfo =
                {
                    RedirectStandardOutput = true,
                    RedirectStandardError = true,
                    FileName = fileName,
                    Arguments = arg ,
                    UseShellExecute = false,
                    CreateNoWindow = true
                },
                EnableRaisingEvents = true
            };

            process.Start();
            string processOutput; 
            while ((processOutput = process.StandardError.ReadLine()) != null)
            {
                Console.WriteLine(processOutput);
            }

            process.Dispose();
        }

谢谢…但我不想等待这个过程。启动的进程将停止我的systemd服务,这意味着我无法重定向输出或执行读取行。我刚刚通过覆盖文件并重新启动systemd服务解决了更新过程,因为我可以在服务运行期间覆盖文件。但是仍然想知道是否可以独立于主进程执行shell脚本您可以创建新线程并在其上运行shell。我希望你能看到你程序中的任何错误。如果您想让shell运行到其他线程,请使用fire并忘记扩展函数。谢谢……但我不想等待进程。启动的进程将停止我的systemd服务,这意味着我无法重定向输出或执行读取行。我刚刚通过覆盖文件并重新启动systemd服务解决了更新过程,因为我可以在服务运行期间覆盖文件。但是仍然想知道是否可以独立于主进程执行shell脚本您可以创建新线程并在其上运行shell。我希望你能看到你程序中的任何错误。如果希望shell运行到其他线程,请使用fire和forget扩展函数