Abrufen der PID des Prozesses aus dem Bash-Shell-Befehl, der von der MONO C # -Anwendung aufgerufen wird

1

Ich habe folgenden Linux Terminal Befehl:

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

welche funktioniert gut von Linux-Terminal und retreives PID vom gewünschten Prozess wird zum Beispiel ausgegeben: 5532. Allerdings muss ich den oberen Befehl ausführen Mono C# Anwendung mit folgendem Code:

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

das ist (fast) identisch mit Befehl, vom Terminal gestartet Die Ausgabe ist jedoch:

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

aber ich brauche nur PID Spalte, d.h. PID eines Prozesses . Warum unterscheidet sich die Ausgabe?

KernelPanic
quelle

Antworten:

1

Du musst dem entkommen $, so was

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

Wenn nicht $2 wird von der Shell zu früh interpretiert und sieht dann so aus:

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

und dies wird nur die gesamte Eingabezeile drucken

Nifle
quelle