MONO C#アプリから呼び出されたbashシェルコマンドからプロセスのPIDを取得する


1

私は次のLinuxターミナルコマンドを持っています:

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

これは、Linuxの端末から正常に動作してretreives 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
    }
};

これは(ほぼ)コマンドと同じで 、terminalから起動されますが、出力は次のとおりです。

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

そして、これは単に入力行全体を印刷します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.