让Mono运行时运行进程

时间:2013-09-27 13:13:11

标签: c# linux process mono

我在使用Mono运行时,Ubuntu服务器和C#代码运行进程时遇到问题。

我试图使用以下方式获取进程列表:

Process.GetProcesses().ToList<Process>().ForEach((s) => {
            Console.WriteLine(s.ProcessName);
        });

我得到以下列表:(已恢复)

  

rsyslogd perl perl mono smbd sshd bash sudo

所以,我想我遇到了与执行Java Jar类似的问题。我可以看到单声道 控制台运行,但我无法让他的子进程运行,所以我无法开发另一个 应用程序充当监视器。我需要检查应用程序是否一直在运行。

我设法用/ bin / bash命令实现它:

Process.Start("/bin/bash"," -c 'ps -aux | grep Watcher'");

所以我得到了一个有效的输出:

  

root 25597 0.0 0.4 23540 9132? Sl Sep26 0:07单声道   /var/lib/sarg/Watcher.exe root 29226 0.0 0.0 5184 1112 pts / 0   S + 15:04 0:00 / bin / bash -c ps -aux | grep Watcher root 29228   0.0 0.0 4392 820 pts / 0 S + 15:04 0:00 grep Watcher

如你所见,这一行:

  

/var/lib/sarg/Watcher.exe root

重申我的过程如何运行,但这不是很优雅,我必须解析 输出。

我会解析它如果没有其他选择,但可能有一个,我不知道。

4 个答案:

答案 0 :(得分:1)

Process.GetProcessesbyName在内部调用Process.GetProcesses(“。”),然后将结果过滤到与请求的processName匹配的那些

问题是该过程被命名为“mono”而非“观察者”...

您永远不会使用“观察者”按名称找到该过程。你必须获得ProcessesByName(“mono”)。

答案 1 :(得分:0)

尝试使用Process.GetProcessesByName("Watcher"),这似乎对我有用。

答案 2 :(得分:0)

测试一些代码并使用:

Proccess[] Proc =Process.GetProcessesByName("mono");

我终于在他的堆栈跟踪中遇到了异常:

Unhandled Exception: System.NotImplementedException: The requested feature is not implemented.
  at System.Diagnostics.Process.get_SessionId () [0x00000] in <filename unknown>:0
  at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_SessionId ()
  at ProcWatch.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.NotImplementedException: The requested feature is not implemented.
  at System.Diagnostics.Process.get_SessionId () [0x00000] in <filename unknown>:0
  at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_SessionId ()
  at ProcWatch.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

请求功能未实现。因此,使用.NET框架无法恢复单个子进程。我是通过使用shell命令来完成的:

Process.Start("/bin/bash"," -c 'ps -aux | grep Watcher'");

答案 3 :(得分:0)

看看有问题:获取MONO在GNU / Linux上执行的流程

解决方案查找所有进程名称MONO或CLI,然后读取进程的命令行。 命令行提供由MONO执行的应用程序的名称

Get process executed by MONO on GNU/Linux

干杯