管理者権限なしで親プロセスを強制終了するにはどうすればよいですか? プロセス A がプロセス B を作成し、プロセス BI でプロセス A を強制終了する必要があります。
4 に答える
ProcessB が ProcessA に、実行を停止するように通知するようにします。その後、ProcessA はすべてのリソースをクリーンアップして正常に終了できます (回答へのコメントで示唆されているように)。では、プロセスはどのようにして別のプロセスに何かを通知するのでしょうか? これはプロセス間通信 (IPC) と呼ばれ、メッセージ バス、Web サービス、名前付きパイプなど、同じマシン上またはマシン間で行う方法がたくさんあります。
簡単なオプションは、システム全体の EventWaitHandle です。ここでの良い例です。子プロセスが完全に初期化されたことを親プロセスに通知します。
したがって、両方のプロセスのソース コードがあります。この場合、セマフォのような名前付きシステム イベントを使用して、プロセス A を正常に終了できます。たとえば、プロセス A で名前付きセマフォを構築し、プロセス B を開始するときにコマンド ライン パラメータの 1 つとして名前をプロセス B に渡します。プロセス B から既存の名前付きセマフォを呼び出して、プロセス A に終了できることを知らせるように信号を送ります。taskkill を使用することもできますが、A を正常に終了しないと、A が使用するリソースが破損する可能性があります。
これを確認してください:
タスクキル
1 つ以上のタスクまたはプロセスを終了します。プロセスは、プロセス ID またはイメージ名によって強制終了できます。構文
taskkill [/s コンピューター] [/u ドメイン\ユーザー [/p パスワード]]] [/fi フィルター名] [/pid プロセス ID]|[/im イメージ名] [/f][/t]
/t : 親プロセスと共にすべての子プロセスを終了するように指定します。これは、一般にツリー キルとして知られています。
次のように C# でプロセスを開始できます。
using System.Diagnostics;
string args = ""; // write here a space separated parameter list for TASKKILL
Process prc = new Process(new ProcessStartInfo("Taskkill", args));
prc.Start();
あなたがparentProcessNameを知っていれば、すべては非常に簡単です。解決策は次のとおりです。
System.Diagnostics.Process.GetProcessesByName ("ParentProcessName")[0].Kill();
そうでない場合は、少し難しくなります。