从 MONO C# 应用程序调用的 bash shell 命令获取进程的 PID

从 MONO C# 应用程序调用的 bash shell 命令获取进程的 PID

我有以下 Linux 终端命令:

ps -aef | grep -v grep | grep 'TestService.exe' | awk '{print $2}'

哪个在 Linux 终端上运行良好并检索PID所需进程,例如输出为:5532。但是,我必须Mono C#使用以下代码从应用程序运行上层命令:

Process proc = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "/bin/bash",
        Arguments = string.Format("-c ps -aef | grep -v grep | grep '{0}' | awk '{{print $2}}'", p),
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = false
    }
};

这与命令几乎相同, 从终端启动但是,输出是:

testuser+   2184   2160  0 11:43 pts/0    00:00:03 /usr/local/bin/mono-sgen /home/testuser/testuser/MONO/cs/src/testApp/bin/Debug/TestService.exe

但我只需要PID列,即进程的 PID. 为什么输出不同?

答案1

你需要逃离$,就像这样

/bin/bash -c "ps -aef | grep -v grep | grep '{0}' | awk '{{print \$2}}'"

如果你没有$2过早地被 shell 解释,那么它最终会变成这样:

/bin/bash -c "ps -aef | grep -v grep | grep '{0}' | awk '{{print}}'" 

这将打印整个输入行

相关内容