Windows – 任务计划程序仅杀死cmd.exe但不杀死其子进程

前端之家收集整理的这篇文章主要介绍了Windows – 任务计划程序仅杀死cmd.exe但不杀死其子进程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们的客户有一些 Windows 2003服务器运行由任务计划程序激活的批处理作业.执行工作的实际程序是自定义.exe进程,它们聚合到.cmd脚本中,以便在计划的时间间隔到期时由任务计划程序一起启动. cmd脚本中的行可能会也可能不会使用“调用”命令来启动单独的.exe程序.

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

最初,当我在我的Windows XP工作站上调查此行为时,我发现从我的测试.cmd脚本启动的子.exe进程在任务计划程序决定时间到期时会与cmd.exe一起被杀死.我无法孤立子进程.

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

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

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

尝试在命令行上使用“Taskkill / T”. (/ T =“…终止指定的进程以及由它启动的所有子进程……”)

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

猜你在找的Windows相关文章