我在Windows服务器上运行各种进程(混合了批处理文件、java、perl、csharp脚本/应用程序)。这些进程是使用Autosys启动的。Windows上的autosys代理总是在作业定义中提供的命令前面加上'cmd /c‘前缀(参见下面的示例)
C:\Windows\system32\cmd.exe /C foobar.exe这本身并不是问题,但是当我试图通过发送一个autosys KILLJOB事件(根据Autosys文档向进程发送一个中断,然后是kill信号)来终止作业时,foobar.exe不会被终止,而是父cmd.exe被终止。foobar.exe最终成为一个孤立进程,然后我们需要登录到服务器,使用任务管理器手动终止它。
有没有什么解决方案可以让来自autosys的终止信号传播到实际的进程中?
谢谢。
发布于 2012-07-20 03:37:23
这是处理Windows Autosys作业时的一个已知错误。这是来自Autosys R11参考手册。我从未尝试过使用此修复程序。祝好运。
在不使用cmd.exe的情况下,foobar.exe是否可以运行?我会尝试一下,看看KILLJOB事件是否正常工作。
Windows不支持进程组的概念。当您为运行可执行文件(.exe)的作业发出KILLJOB事件时,KILLJOB将终止命令定义中指定的进程。当您为运行*.exe以外的其他内容(例如,*.bat、*.cmd或.com)的作业发出KILLJOB事件时,KILLJOB仅终止CA Workload Automation AE用来启动作业的CMD.EXE进程。作业状态是根据已终止的CMD.EXE进程的返回代码设置的,可以是以下值之一:成功、失败或已终止。由用户应用程序或批处理(.bat)文件启动的进程不会被终止。要解决此限制,您可以修改您的程序,以监视来自Windows计算机上运行的CA Workload Automation AE作业的信号,并且您可以为SEND_SIGNAL事件实现此参数。*
https://stackoverflow.com/questions/11363774
复制相似问题