【问题标题】:Kill parent process without administrator rights杀死没有管理员权限的父进程
【发布时间】:2011-11-28 10:25:03
【问题描述】:

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

【问题讨论】:

  • 使用 IPC 和退出令牌怎么样(这是优雅退出而不是进程终止)?还是您无法编辑进程 A 的源代码?
  • @lsk 请回答你被问到的问题——不要只说谢谢
  • "或者您无法编辑过程 A 的源代码?"你所说的过程的“来源”是什么意思?进程 A 和进程 B 运行我(它们由我运行)
  • 让我这样说:你能编辑A的可执行文件的源代码吗?如果不是,那么您应该接受建议使用 taskkill 工具的答案,如果是,那么您还有其他选项可以优雅地结束进程 A。此信息应该在您的问题中,以便我们可以为您提供更有意义的答案。

标签: c# .net process kill-process


【解决方案1】:

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

一个简单的选项是系统范围的 EventWaitHandle - 这里是一个很好的例子Signalling to a parent process that a child process is fully initialised

【讨论】:

  • 好的,谢谢你,彼得。但重要的问题 - 它可以在没有管理员权限的情况下工作吗?
  • ProcessA 正在停止运行,因此没有管理员权限不足的问题。
  • 如果可以访问父进程的源代码,这是一个好方法:))
  • 有,作者在问题的cmets中这么说
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    查看this:

    任务杀

    结束一项或多项任务或流程。进程可以被杀死 进程 ID 或映像名称。语法

    taskkill [/s 计算机] [/u 域\用户 [/p 密码]]] [/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();
    

    【讨论】:

    • TerminateProcess 更有意义
    • @DavidHeffernan TerminateProcess 很好,但你必须 P/Invoke 它
    • @harold P/invoke 有什么问题?启动另一个进程有点矫枉过正。如果它不存在怎么办?
    • 如果你不喜欢 P/invoke 那么打电话给Process.Kill()不是更容易吗?!!
    • 涉及另一个进程以杀死进程是非常愚蠢的方法。并且不保证 taskkill.exe 的存在(管理员可以限制对它的访问或完全删除它)
    【解决方案4】:

    如果你知道parentProcessName,一切都很简单,那么解决方案是:

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

    如果没有,那就有点难了。

    【讨论】:

    • ProcessB 没有管理员权限来杀死其他进程。
    • 那么有两种方法:1)从具有管理员权限的用户运行另一个进程2)“要求”父进程终止自身(如果是您的应用程序)
    • @Praetor12 但实际上他提到他没有管理权限,所以Process.Kill在这里毫无意义
    • @Mr.DDD Taskkill,以非特权用户的形式运行,将具有相同的用户特权...
    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    相关资源
    最近更新 更多