用process.start执行进程会导致内存segfault,但在shell中手动启动不会

wmvff8tz  于 2023-06-24  发布在  Shell
关注(0)|答案(1)|浏览(135)

我试图使用C#来 Package 一个需要一些错误和条件的Linux可执行文件。我在一个docker容器中这样做,并将我的C#应用程序称为ENTRYPOINT
我的C#应用程序在容器启动时正常启动,并开始启动子进程,但每次启动子进程时,子进程都会出错。

panic: runtime error: invalid memory address or nil pointer dereference

如果我删除我的C# Package 器服务并直接从./entrypoint.sh调用子进程,它就可以正常启动。
我一直在向上/向下和所有的地方,但我找不到任何关于process.start,可以创建一个不同的启动环境,而不是一个标准的shell启动。
我尝试过直接执行进程,将进程作为/bin/sh -c "myproc"/bin/sh /app/entrypoint.sh执行。不管发生什么,如果它是由process.Start()启动的,它会崩溃,如果它是通过shell启动的,它会没事的。
这是我的进程开始代码。

_process = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = "/bin/sh",
                    Arguments = "/app/entrypoint.sh",
                    WorkingDirectory = "/app",
                    CreateNoWindow = true,
                    RedirectStandardError = false,
                    RedirectStandardOutput = false,
                },
                EnableRaisingEvents = true
            };

我的entrypoint.sh非常简单。

#!/bin/sh
#whoami # returns root
#ps aux # looks fine

exec myproc-server

process.Start()是否在一个方法中派生进程,导致它不是一个完整的shell?

wlzqhblo

wlzqhblo1#

结果,我必须指定以下属性。

CreateNoWindow = true,
RedirectStandardError = true,
RedirectStandardOutput = true,

一旦我重定向了输出和错误,它就开始工作了。

相关问题