我试图使用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?
1条答案
按热度按时间wlzqhblo1#
结果,我必须指定以下属性。
一旦我重定向了输出和错误,它就开始工作了。