Mono Process.Start 返回 ExitCode 255?
Posted
技术标签:
【中文标题】Mono Process.Start 返回 ExitCode 255?【英文标题】:Mono Process.Start returning ExitCode 255? 【发布时间】:2011-04-06 17:55:56 【问题描述】:我有一个在 CentOS 5.5 上运行的简单 C# Mono 2.10 应用程序,它调用
Process.Start("/path/to/myapp/myapp.exe","-someArgs");
我能够取回进程 ID 并使用
运行mono --trace=N:System.Diagnostics
显示一个似乎表明 Process.Start 返回 true 的堆栈:
LEAVE: System.Diagnostics.Process:Start_noshell (System.Diagnostics.ProcessStartInfo,System.Diagnostics.Process)TRUE:1
LEAVE: System.Diagnostics.Process:Start_common (System.Diagnostics.ProcessStartInfo,System.Diagnostics.Process)TRUE:1
LEAVE: System.Diagnostics.Process:Start ()TRUE:1
LEAVE: (wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()TRUE:1
我认为这意味着该进程是在没有 FileNotFound 等异常的情况下生成的。
但是,该进程似乎立即退出,我得到的退出代码是 255。我认为这是一个具有明显含义的 Linux 退出代码,但我在试管上找不到任何用处。
直接通过启动完全相同的应用程序时
mono /path/to/myapp/myapp.exe -someArgs
应用程序正常启动,没有任何异常,并按预期工作。
知道我在搞砸什么吗?
【问题讨论】:
【参考方案1】:文件/path/to/myapp/myapp.exe
是可执行文件(chmod +x /path/to/myapp/myapp.exe
)吗? Mono 2.10 确实检查它正在启动的进程是否是托管可执行文件,如果是,将隐式使用当前正在执行的 mono 来启动新进程,例如Mono's CreateProcess source。 CreateProcess
包含所有详细信息,但其中包括:
如果Process.Start
仍然无法启动您的进程,那么这可能是一个单声道错误,我们很乐意为此报告一个错误。 :-)
【讨论】:
好的,所以你会以新的答案获胜,以获得明确的解释。如果我在我的 exe 上使用 ls -l,则权限是 -rwxr-xr-x 因此,即使在 myexe 上强制执行 chmod +x (它已经是)它仍然无法启动我的进程。那么单声道中的错误呢?【参考方案2】:尝试启动“mono”作为进程,并使用“/path/to/myapp/myapp.exe -someArgs”作为命令行参数。这将导致 Process.Start 的行为更像您的正常应用程序启动。
【讨论】:
我想过尝试一下。让我看看会发生什么 太棒了,解决了问题。有道理,我正在启动的“应用程序”是“mono”而不是“myapp.exe”,谢谢 这应该不是必需的,因为 mono 的 CreateProcess() 显式检查托管可执行文件并隐式使用相同的mono
来启动它们。 “/path/to/myapp/myapp.exe”是否可执行(chmod +x
)?另见:github.com/mono/mono/blob/master/mono/io-layer/processes.c#L812【参考方案3】:
问题在于 Linux 本身并不知道它需要使用 Mono 来运行 CIL .exe 二进制文件,所以它尝试使用 ld-linux.so 作为加载程序,但显然失败了。
您需要使用 /path/to/myapp.exe 作为 arg 调用单声道。
FWIW,退出代码 255 只是“错误”。
【讨论】:
我认为 255 没用,感谢您提供的信息。里德领先你几分钟,但两个答案都是正确的。谢谢【参考方案4】:您可以使用 Process.Start 的这种重载来启动进程:
Process.Start("/bin/bash", "-c \"echo 'Hello World!'\"");
不知道为什么,但它有效。
【讨论】:
以上是关于Mono Process.Start 返回 ExitCode 255?的主要内容,如果未能解决你的问题,请参考以下文章