我在Windows服务器上运行各种进程(批处理文件,java,perl,csharp脚本/应用程序的混合)。这些进程是使用 Autosys 启动的。Windows 上的 autosys 代理始终将我在作业定义中提供的命令前缀为"cmd/c"(请参阅下面的示例)
C:Windowssystem32cmd.exe /C foobar.exe
这本身不是问题,但是当我尝试通过发送 autosys KILLJOB 事件来终止作业时(根据 Autosys 文档,向进程发送中断后跟终止信号),foobar.exe 没有被杀死,而是父 cmd.exe 被杀死。 foobar.exe 最终成为一个孤立进程,我们需要登录到服务器以使用任务管理器手动终止它。
有没有人有任何解决方案,以便来自 autosys 的终止信号传播到实际过程?
谢谢。
这是处理Windows Autosys作业时的一个已知错误。 本文来自 Autosys R11 参考手册。我从未尝试过使用此修复程序。祝你好运。
foobar.exe会在不使用cmd.exe的情况下运行吗?我会尝试一下,看看 KILLJOB 事件是否正常工作。
Windows 不支持进程组的概念。为运行可执行文件 (.exe) 的作业发出 KILLJOB 事件时,KILLJOB 会终止命令定义中指定的进程。当您为运行 *.exe 以外的其他内容(例如,*.bat、*.cmd 或 .com)的作业发出 KILLJOB 事件时,KILLJOB 仅终止 CA 工作负载自动化 AE 用于启动作业的 CMD.EXE 进程。作业状态根据已终止的 CMD.EXE 进程的返回代码进行设置,可以是以下选项之一:"成功"、"失败"或"已终止"。用户应用程序或批处理 (.bat) 文件启动的进程不会被终止。若要解决此限制,可以修改程序以监视来自 Windows 计算机上运行的 CA 工作负载自动化 AE 作业的信号,并且可以为 SEND_SIGNAL 事件实现此参数。