【问题标题】:Autosys: KILLJOB event leaves orphan processesAutosys:KILLJOB 事件离开孤立进程
【发布时间】:2012-07-06 14:04:46
【问题描述】:

我在 Windows 服务器上运行各种进程(批处理文件、java、perl、csharp 脚本/应用程序的混合)。这些进程是使用 Autosys 启动的。 Windows 上的 autosys 代理总是在我在作业定义中提供的命令前加上“cmd /c”(参见下面的示例)

C:\Windows\system32\cmd.exe /C foobar.exe

这本身不是问题,但是当我尝试通过发送 autosys KILLJOB 事件来终止作业(根据 Autosys 文档向进程发送中断后跟终止信号)时,foobar.exe 不会被终止,被杀死的是父 cmd.exe。 foob​​ar.exe 最终成为一个孤立进程,然后我们需要登录到服务器以使用任务管理器手动终止它。

有没有人有任何解决方案让来自 autosys 的终止信号传播到实际进程?

谢谢。

【问题讨论】:

    标签: windows signal-handling autosys remote-process


    【解决方案1】:

    这是处理 Windows Autosys 作业时的一个已知错误。这来自 Autosys R11 参考手册。我从未尝试过使用此修复程序。祝你好运。

    foobar.exe 会在不使用 cmd.exe 的情况下运行吗?我会尝试一下,看看 KILLJOB 事件是否正常工作。

    Windows 不支持进程组的概念。当您为运行可执行文件 (.exe) 的作业发出 KILLJOB 事件时,KILLJOB 会终止命令定义中指定的进程。当您为运行非 *.exe 的作业(例如,*.bat、*.cmd 或 .com)的作业发出 KILLJOB 事件时,KILLJOB 仅终止 CA Workload Automation 的 CMD.EXE 进程AE用于启动工作。 Job Status 是根据被终止的 CMD.EXE 进程的返回码设置的,可以是以下之一:SUCCESS、FAILURE 或 TERMINATED。用户应用程序或批处理 (.bat) 文件启动的进程不会被终止。要解决此限制,您可以修改程序以监视来自在 Windows 计算机上运行的 CA Workload Automation AE 作业的信号,并且您可以为 SEND_SIGNAL 事件实现此参数。*

    【讨论】:

    • 谢谢,我能够在文档中找到它。我尝试在 foobar.exe 中捕获 SEND_SIGNAL 事件,但 Autosys 代理终止进程时信号未通过。我通过编写一个捕获其父 pid 的进程包装器可执行文件来解决这个问题(因此它获得了启动进程的 autosys 代理的句柄),然后它启动了子进程。进程包装器等待并监视父 pid,当父 pid 终止时,它会清理并终止所有子进程。到目前为止,这似乎运作良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多