2016-02-03 43 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將列出系統包含的守護程序中的所有正在運行的進程。