在一定时间内终止进程的逻辑

肖恩·托曼(Sean Thoman)

我想确保我的逻辑在这里是正确的。我想将一个进程运行timeout几秒钟,如果运行时间更长,则应立即将其终止。

completed标志应可靠地指示过程是否按预期完成,例如是否被终止,未崩溃或未引发异常。

另外,如果检查process.HasExited正确,我也不肯定如果process.WaitForExit()返回false并Kill()成功,那么将process.HasExited 始终为true?那是我的假设,但我想确认。另外,如果Kill()失败,除了日志记录之外还能做什么?

        using (process = new Process())
        {
            process.EnableRaisingEvents = true;
            process.OutputDataReceived += new DataReceivedEventHandler(OnOutputDataReceived);
            process.ErrorDataReceived += new DataReceivedEventHandler(OnErrorDataReceived); 
            process.Exited += new EventHandler(OnExited);

            process.StartInfo = startInfo;
            process.Start();

            process.BeginOutputReadLine();
            process.BeginErrorReadLine();

            if (!process.WaitForExit(timeout))
            {
                try
                {
                    process.Kill(); 
                }
                catch (Exception e)
                {
                    LogError(e, MethodBase.GetCurrentMethod());
                }
                finally
                {
                    this.completed = false;
                }
            }
            else
            {
                if (process.HasExited)
                {
                    this.code = process.ExitCode; 
                    this.completed = true;
                }
                else
                {
                    this.completed = false; 
                }
            }
        }
本机

是的,在您的情况下,HasExited将始终为真。

根据MSDN

HasExited的值为true表示关联的进程已正常或异常终止 [...]一个进程可以独立于您的代码终止。如果您使用此组件启动该进程,则系统将更新HasExited的值自动,即使关联的过程独立地退出

但是,如果您的进程崩溃并在超时之前终止,那么您的代码无论如何都会将其设置为已完成。也许您应该检查退出代码,但是对于每个过程它可能具有不同的含义

if (process.ExitCode != 0)
{
    this.completed = false;
}

对于崩溃,这里这里都有一些方法,但是通常您无法检测到所有进程的崩溃。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在一定时间内暂停进程?

来自分类Dev

在一定时间内显示通知消息

来自分类Dev

在一定时间内运行循环的最佳方法

来自分类Dev

在一定时间内重启systemd服务

来自分类Dev

在一定时间内运行一个命令,退出,然后运行

来自分类Dev

有一种方法可以在一定时间内禁用方法吗?

来自分类Dev

如何在一定时间内更改变量

来自分类Dev

在一定时间内没有收到数据后断开套接字

来自分类Dev

如果在一定时间内没有响应,请跳过

来自分类Dev

Z3Opt:在一定时间内找到次优模型?

来自分类Dev

如何定期和一定时间内的运行作业

来自分类Dev

最短的计时器间隔,可以在一定时间内将值加到100

来自分类Dev

如何在python中使Tkinter在一定时间内完成每个代码?

来自分类Dev

如何列出在一定时间内更改的文件?

来自分类Dev

GPG:在一定时间内对管道中的数据进行加密,然后停止

来自分类Dev

如何在一定时间内循环执行此功能?

来自分类Dev

如何让python等待输入直到输入在一定时间内保持不变

来自分类Dev

如果按下按钮,如何在一定时间内显示图像

来自分类Dev

如何防止我的用户在一定时间内做某事

来自分类Dev

如何在一定时间内(10秒)自动在php中显示下一页?

来自分类Dev

Unity2D:如何在一定时间内锁定游戏,就像糖果迷一样

来自分类Dev

如何知道iOS应用在一定时间内没有收到触摸事件

来自分类Dev

Love2D在给定时间内旋转图像,直到达到一定角度

来自分类Dev

SQL选择两个不同名称在一定时间内相互匹配的位置

来自分类Dev

除非用户在python中提供输入,否则如何创建在一定时间内激活的功能

来自分类Dev

我想在一定时间内将 Firebase 数据库上的值设置为 True

来自分类Dev

一定时间后,从命令行停止/终止进程

来自分类Dev

如果未在一定时间内执行任务,则如何为任务设置时间限制,然后将其移至芹菜中

来自分类Dev

在特定时间内运行功能

Related 相关文章

  1. 1

    如何在一定时间内暂停进程?

  2. 2

    在一定时间内显示通知消息

  3. 3

    在一定时间内运行循环的最佳方法

  4. 4

    在一定时间内重启systemd服务

  5. 5

    在一定时间内运行一个命令,退出,然后运行

  6. 6

    有一种方法可以在一定时间内禁用方法吗?

  7. 7

    如何在一定时间内更改变量

  8. 8

    在一定时间内没有收到数据后断开套接字

  9. 9

    如果在一定时间内没有响应,请跳过

  10. 10

    Z3Opt:在一定时间内找到次优模型?

  11. 11

    如何定期和一定时间内的运行作业

  12. 12

    最短的计时器间隔,可以在一定时间内将值加到100

  13. 13

    如何在python中使Tkinter在一定时间内完成每个代码?

  14. 14

    如何列出在一定时间内更改的文件?

  15. 15

    GPG:在一定时间内对管道中的数据进行加密,然后停止

  16. 16

    如何在一定时间内循环执行此功能?

  17. 17

    如何让python等待输入直到输入在一定时间内保持不变

  18. 18

    如果按下按钮,如何在一定时间内显示图像

  19. 19

    如何防止我的用户在一定时间内做某事

  20. 20

    如何在一定时间内(10秒)自动在php中显示下一页?

  21. 21

    Unity2D:如何在一定时间内锁定游戏,就像糖果迷一样

  22. 22

    如何知道iOS应用在一定时间内没有收到触摸事件

  23. 23

    Love2D在给定时间内旋转图像,直到达到一定角度

  24. 24

    SQL选择两个不同名称在一定时间内相互匹配的位置

  25. 25

    除非用户在python中提供输入,否则如何创建在一定时间内激活的功能

  26. 26

    我想在一定时间内将 Firebase 数据库上的值设置为 True

  27. 27

    一定时间后,从命令行停止/终止进程

  28. 28

    如果未在一定时间内执行任务,则如何为任务设置时间限制,然后将其移至芹菜中

  29. 29

    在特定时间内运行功能

热门标签

归档