AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 47389
In Process
icelava
icelava
Asked: 2009-07-29 19:41:57 +0800 CST2009-07-29 19:41:57 +0800 CST 2009-07-29 19:41:57 +0800 CST

任务计划程序只杀死 cmd.exe 而不是它的子进程

  • 772

我们的客户有一些运行由任务计划程序激活的批处理作业的 Windows 2003 服务器。执行工作的实际程序是自定义的 .exe 进程,它们被聚合到 .cmd 脚本中,以便在预定的时间间隔到来时由任务计划程序一起启动它们。cmd 脚本中的行可能会或可能不会使用 Call 命令来启动单独的 .exe 程序。

在此设置中,任务计划程序有效地监控 cmd.exe,当使用进程资源管理器时,可以观察到子 .exe 进程停在 cmd.exe 进程树下。但是,当任务计划程序因超过允许的时间限制而杀死 cmd.exe 时,子 .exe 进程可能不会与其父进程一起被杀死并成为孤立的。这些进程无限期地停滞不前。由于 Process Explorer 中显示的进程线程的状态,我怀疑这些进程最终出错并弹出一个 .NET 调试器对话框(这些是 .NET 应用程序),因为批处理作业用户是单独的用户,所以无法看到该对话框帐户。

最初,当我在 Windows XP 工作站上调查此行为时,我观察到当任务计划程序确定时间到时,从我的测试 .cmd 脚本启动的子 .exe 进程确实与 cmd.exe 一起被杀死。我不可能孤立子进程。

基于一种预感,我最终转移到一台 Windows 2003 机器上进行测试。同样,子进程也会像我的工作站一样被终止。然后我的第二步是使用另一个用户帐户来运行计划任务。这一次, cmd.exe 在超过时间限制后被杀死,但子进程保持不变,就像我的客户在他们的生产服务器中观察到的一样。

如果我抢先登录该批处理用户帐户(恰好是另一个管理员帐户)以申请桌面会话,则来自我的测试 .exe 程序的任何错误或信息弹出窗口都将被路由并呈现在该桌面上,允许我查看实际的用户输出。如果我只在调度任务被调用后登录,桌面会话将不会“回收”现有进程的窗口;他们永远隐藏起来。

我的问题是,我在这里缺少什么条件会导致任务计划程序无法清除 cmd.exe 下的子进程?使用会导致这种行为的另一个帐户有什么特别之处,但在使用我当前的管理员帐户运行计划任务时没有?

windows windows-server-2003 task-scheduler
  • 5 5 个回答
  • 8523 Views

5 个回答

  • Voted
  1. Warren Stevens
    2014-02-15T06:55:38+08:002014-02-15T06:55:38+08:00

    尝试在命令行上使用“Taskkill /T”。(/T = “...终止指定进程和由它启动的任何子进程...”)

    如果您有多个进程正在运行(我们通常运行 5 个或更多“powershell.exe”),则将“命令行”列添加到任务管理器的“详细信息”选项卡中。那应该清楚哪个进程 ID 是您要杀死的进程 ID

    • 2
  2. Christopher_G_Lewis
    2010-03-02T07:04:03+08:002010-03-02T07:04:03+08:00

    进程在 Windows 中是独立的 - 终止父进程不会自动终止子进程。

    • 1
  3. Adam Brand
    2009-07-29T19:51:18+08:002009-07-29T19:51:18+08:00

    如果您认为这是由于弹出了调试器消息,您是否尝试过将代码包装在一个try{}catch{}块中并记录错误?

    否则,也许您可​​以做的是让进程写入WindowsPrincipal wp = new WindowsPrincipal(WindowsIdentity.GetCurrent())

    我怀疑孩子们以某种方式将他们的特权级别升级到管理员,然后不能被父母杀死。

    要在不修改代码的情况下对此进行测试,您可以编写另一个计划任务,尝试使用taskkill杀死其他进程。此计划任务应以管理员身份运行。如果可行,那么看起来这是一个安全问题。

    • 0
  4. Bork Blatt
    2009-07-30T02:59:58+08:002009-07-30T02:59:58+08:00

    如何使用pskill实用程序,它是 SysInternals 套件的一部分。该程序可以按名称杀死进程。我将添加一个计划任务,该任务将在您期望进程完成后几分钟运行,该任务将运行 pskill 来终止它们。

    PSKill 也可以在您在命令行上提供的用户凭据下运行。

    • 0
  5. M Aguilar
    2009-07-30T06:25:45+08:002009-07-30T06:25:45+08:00

    我不知道它会解决你的问题,但如果它与弹出框有关(它可能是 - 应用程序处于故障状态,并在不存在的用户决定如何处理时暂停) .

    看看http://blogs.msdn.com/shawnfa/archive/2004/07/15/184490.aspx,看看你能不能摆脱那些盒子......

    • 0

相关问题

  • Vanilla Powershell 是否足以成为 Windows 和 DB 服务器管理员的语言?

  • 为什么添加新驱动器后我的磁盘驱动器访问速度如此之慢?

  • 在 Windows Server 2003 下使用 wscipt 从 .asp 文件运行 .exe

  • 最佳混合环境(OS X + Windows)备份?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve