2012-07-06 133 views
1

我在Windows服務器(批處理文件,java,perl,csharp腳本/應用程序的混合)上運行各種進程。這些過程使用Autosys啓動。在Windows上autosys劑總是前綴我在「CMD/C」作業定義爲命令(見下例)Autosys:KILLJOB事件離開孤立進程

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

這本身是沒有問題的,但是當我嘗試通過發送殺工作一個autosys KILLJOB事件(按照Autosys文檔向該進程發送一箇中斷並接着發送kill信號),foobar.exe不會被終止,而是被殺死的父級cmd.exe。 foob​​ar.exe最終成爲一個孤兒進程,我們需要登錄到服務器手動終止它使用任務管理器。

有沒有人有任何解決方案,以便來自autosys的終止信號傳播到實際過程?

謝謝。

回答

1

這是處理Windows Autosys作業時的已知錯誤。這是來自Autosys R11參考手冊。我從來沒有嘗試過使用此修復程序。祝你好運。

foobar.exe會運行而不使用cmd.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事件實施此參數。*

+0

謝謝,我能夠在文檔中找到它。我嘗試捕獲foobar.exe中的SEND_SIGNAL事件,Autosys代理程序終止該過程時信號不通過。我有一個解決此問題的方法,編寫一個捕獲其父pid的進程包裝程序可執行文件(以便它獲得啓動進程的autosys代理的句柄),然後啓動子進程。當父pid終止時,進程封裝器會等待並監視父pid,它會清理並終止所有子進程。迄今爲止,這似乎運作良好。 – 2012-08-02 13:32:35