Получение PID процесса из команды оболочки bash, вызванной из приложения MONO C#

У меня есть следующая команда терминала 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 интерпретируется слишком рано оболочкой, и это заканчивается так:

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

и это просто напечатает всю строку ввода

Другие вопросы по тегам