0

我在使用 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'");

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

根 25597 0.0 0.4 23540 9132 ?Sl Sep26 0:07 mono /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 根目录

重申我的进程正在运行,但这不是很优雅,我必须解析输出。

如果没有其他选项,我会解析它,但也许有一个,但我不知道。

4

4 回答 4

1

Process.GetProcessesbyName 在内部调用 Process.GetProcesses(".") ,然后将结果过滤为与请求的 processName 匹配的结果

问题是该进程被命名为“mono”而不是“watcher”......

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

于 2013-10-16T16:15:43.673 回答
0

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

于 2013-09-27T15:58:02.083 回答
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'");
于 2013-10-18T06:04:48.890 回答
0

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

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

获取 GNU/Linux 上 MONO 执行的进程

干杯

于 2014-10-15T05:32:57.057 回答