【问题标题】:Can't close process but kill无法关闭进程但杀死
【发布时间】:2015-02-17 08:31:15
【问题描述】:

我有一个奇怪的问题。

我在一个项目上工作了很长时间,该项目可以打开和关闭(如果无法关闭,则终止)进程,该进程在我的本地计算机上运行良好,但在服务器上存在问题。

这段代码可以打开和杀死进程,但在关闭它们时总是超时。

以下几行做('不做)工作。

            Parallel.ForEach(Process.GetProcessesByName(applicationName),
            (Process obj) =>
            {
                AddLog("Waiting for " + obj.ProcessName + " to exit at " + DateTime.Now);
                obj.CloseMainWindow();
                obj.WaitForExit(60000);
            });
            System.Threading.Thread.Sleep(1000);
            if (Process.GetProcessesByName(applicationName).Length != 0)
            {
                AddLog("Process couldn't exited. Trying to kill at " + DateTime.Now);
                if ((killable).ToString() == "T")
                {
                    Parallel.ForEach(Process.GetProcessesByName(applicationName),
                    (Process obj) =>
                    {
                        obj.Kill();
                        AddLog(obj.ProcessName + " was killed at " + DateTime.Now);
                        EventLogEntry(obj.ProcessName + " was killed!!!!!", EventLogEntryType.Error, 4003);
                    });
                }
            }

提前致谢。

【问题讨论】:

    标签: c# multithreading process server


    【解决方案1】:

    根据CloseMainWindow 的文档,不能保证调用该方法时进程会退出。您尝试关闭的进程可能正在显示模式对话框。未关闭的应用程序也可能没有图形界面(在这种情况下,您必须使用Kill 来终止它)。下面提供了相关文档。

    通过调用CloseMainWindow 退出进程的请求不会强制应用程序退出。应用程序可以在退出前要求用户验证,也可以拒绝退出。要强制应用程序退出,请使用Kill 方法

    如果CloseMainWindow 失败,您可以使用Kill 来终止进程。 Kill 是终止没有图形界面的进程的唯一方法。

    我注意到CloseMainWindow 返回一个bool。您可能想尝试读取该值,并且只有 WaitForExit 如果那是 true。您还可以尝试远程访问服务器并将调试器连接到相关进程以查看它为什么不关闭。

    【讨论】:

    • 您如何解释该方法在本地机器上有效但在服务器上无效?
    • 我没有。你没有在你的问题中提供足够的细节来回答这个问题。您要杀死的进程是什么(即applicationName)?您是否尝试过远程访问服务器并查看发生了什么?这个过程是从哪些选项开始的?本地和服务器上的进程是一样的吗?
    猜你喜欢
    • 1970-01-01
    • 2013-08-05
    • 2015-06-08
    • 2015-06-01
    • 2016-07-13
    • 1970-01-01
    • 2015-01-06
    • 2018-05-07
    • 1970-01-01
    相关资源
    最近更新 更多