2016-02-03 67 views
0

我试图使用与管道运行bash命令管道COMAND单过程开始运行bash从单一的Linux

这里的代码片断我试图

单指令的作品,但是管的命令无法运行,有什么我在这里想念吗?

  ProcessStartInfo oInfo = new ProcessStartInfo(command, args);  
      oInfo.UseShellExecute = false; 
      oInfo.CreateNoWindow = true; 
      oInfo.RedirectStandardOutput = true;  
      oInfo.RedirectStandardError = true;  
      StreamReader srOutput = null; 
      StreamReader srError = null;  
      Process proc = System.Diagnostics.Process.Start(oInfo); 
      proc.WaitForExit(); 

我试着运行“ps -aux”,它运行良好。但是ps -aux | grep gnome命令失败。

我试过这些场景 场景1: command = ps argument = -aux | grep的侏儒

场景2: 命令= PS 参数= “-c '-aux | grep的侏儒'”

场景3:

命令= PS 参数= “-c \” - aux | grep的侏儒\”“

所有这些失败,

错误:垃圾选项

用法: PS [选项]

尝试 'PS --help' 或“PS --help ' 获取更多帮助文本。

另外在侧面的问题,我试图做到这一点的原因是找出一个特定的守护进程已经运行。有没有一个标准的方式来获得这个信息。例如在Windows中我们可以使用ServiceController.GetServices()查询正在运行的服务。

直接在mono/Linux上有类似的东西吗?

回答

1

当您添加“|”到bash行,bash解释器在两个进程中拆分命令,并将输出从一个输入到另一个,当您使用Process调用该命令时,它按原样发送参数。

您可以达到的最接近的目标是开始您自己的两个过程,并通过输入/输出流向另一个输出另一个输出。

关于问题的第2部分,如果程序以特权运行,则Process.GetProcesses将列出系统包含的守护程序中的所有正在运行的进程。