1

如何在没有管理员权限的情况下杀死父进程?进程 A 创建进程 B,在进程 BI 中需要杀死进程 A。

4

4 回答 4

2

检查这个

任务杀戮

结束一项或多项任务或流程。可以通过进程 ID 或映像名称来终止进程。句法

taskkill [/s Computer] [/u Domain\User [/p Password]]] [/fi FilterName] [/pid ProcessID]|[/im ImageName] [/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();
于 2011-09-30T12:13:37.640 回答
2

您希望 ProcessB 向 ProcessA 发出信号,表明它希望它停止运行。然后 ProcessA 可以清理任何资源并优雅地退出(如您对答案的评论中所建议的那样)。那么一个进程如何向另一个进程发出信号呢?这被称为进程间通信 (IPC),在同一台机器上或跨机器上有很多方法可以做,包括消息总线、Web 服务、命名管道。

一个简单的选项是系统范围的 EventWaitHandle - 这里是一个很好的例子向父进程发信号通知子进程已完全初始化

于 2011-09-30T12:29:06.063 回答
2

所以你有这两个进程的源代码。在这种情况下,您可以使用信号量之类的命名系统事件来优雅地结束进程 A。例如,在进程 A 中构造一个命名信号量,在启动进程 B 时将名称作为命令行参数之一传递给进程 B。打开来自进程 B的现有命名信号量并发出信号让进程 A 知道它可以结束。您也可以使用 taskkill 但不优雅地结束 A 可能会导致损坏 A 使用的资源。

于 2011-09-30T12:29:47.527 回答
0

如果您知道 parentProcessName,一切都非常简单,那么解决方案是:

System.Diagnostics.Process.GetProcessesByName ("ParentProcessName")[0].Kill();

如果没有,那么它会有点难。

于 2011-09-30T12:50:09.080 回答