我有以下 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}}'"
这将打印整个输入行