0

Mono ランタイム、Ubuntu サーバー、および C# コードでプロセスを実行する際に問題が発生しています。

次を使用してプロセスリストを取得しようとしています:

Process.GetProcesses().ToList<Process>().ForEach((s) => {
            Console.WriteLine(s.ProcessName);
        });

そして、次のリストを取得します:(再開)

rsyslogd perl perl mono smbd sshd bash sudo

したがって、Java Jar の実行と同様の問題があると思います。モノ コンソールが実行されていることは確認できますが、子プロセスを実行できないため、モニターとして機能する別のアプリケーションを開発できません。アプリケーションが常に実行されているかどうかを確認する必要があります。

/bin/bash コマンドを実行して、なんとか達成できました。

Process.Start("/bin/bash"," -c 'ps -aux | grep Watcher'");

したがって、有効な出力が得られます。

ルート 25597 0.0 0.4 23540 9132 ? Sl Sep26 0:07 mono /var/lib/sarg/Watcher.exe root 29226 0.0 0.0 5184 1112 pts/0 S+ 15:04 0:00 /bin/bash -c ps -aux | grep ウォッチャー ルート 29228 0.0 0.0 4392 820 ポイント/0 S+ 15:04 0:00 grep ウォッチャー

ご覧のとおり、この行:

/var/lib/sarg/Watcher.exe ルート

私のプロセスが実行されていることを再確認しますが、これはあまりエレガントではなく、出力を解析する必要があります。

他にオプションがない場合は解析しますが、おそらくオプションがあり、それについてはわかりません。

4

4 に答える 4

1

Process.GetProcessesbyName は内部的に Process.GetProcesses(".") を呼び出し、要求された processName に一致する結果をフィルタリングします。

問題は、プロセスの名前が「ウォッチャー」ではなく「モノ」であることです...

「ウォッチャー」を使用して名前でプロセスを見つけることは決してありません。ProcessesByName("mono") を取得する必要があります。

于 2013-10-16T16:15:43.673 に答える
0

質問を見てください:GNU / LinuxでMONOによって実行されるプロセスを取得する

ソリューションは、すべてのプロセス名 MONO または CLI を検索し、プロセスのコマンドラインを読み取ります。コマンドラインは、MONO によって実行されるアプリケーションの名前を提供します。

GNU/Linux 上の MONO で実行される取得プロセス

乾杯

于 2014-10-15T05:32:57.057 に答える
0

いくつかのコードをテストして使用した後:

Proccess[] Proc =Process.GetProcessesByName("mono");

私はついに彼のスタックトレースで例外に達しました:

Unhandled Exception: System.NotImplementedException: The requested feature is not implemented.
  at System.Diagnostics.Process.get_SessionId () [0x00000] in <filename unknown>:0
  at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_SessionId ()
  at ProcWatch.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.NotImplementedException: The requested feature is not implemented.
  at System.Diagnostics.Process.get_SessionId () [0x00000] in <filename unknown>:0
  at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_SessionId ()
  at ProcWatch.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

リクエスト機能は実装されていません。そのため、.NET フレームワークを使用してモノの子プロセスを回復することはできません。私はシェルコマンドを使用してそれをやっています:

Process.Start("/bin/bash"," -c 'ps -aux | grep Watcher'");
于 2013-10-18T06:04:48.890 に答える