1

У меня есть следующая команда терминала 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 ответ1

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}}'" 

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .