Obtendo o PID do processo do comando bash shell chamado do aplicativo MONO C #

1

Eu tenho o seguinte comando do terminal linux:

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

que funciona bem no terminal Linux e recupera PID do processo desejado, por exemplo, a saída é: 5532 . No entanto, eu tenho que executar o comando superior do aplicativo Mono C# usando o seguinte código:

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
    }
};

que é (quase) idêntico ao comando, lançado do terminal , no entanto, a saída é:

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

mas preciso apenas de PID column, ou seja, PID de um processo . Por que a saída é diferente?

    
por KernelPanic 08.03.2017 / 12:01

1 resposta

1

Você precisa escapar do $ , como este

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

Se você não $2 é interpretado cedo demais pelo shell e termina assim:

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

e isso apenas imprimirá toda a linha de entrada

    
por 08.03.2017 / 12:14