Autosys: событие KILLJOB оставляет сиротские процессы
Я запускаю различные процессы на сервере Windows (набор командных файлов, сценарии / приложения java, perl, csharp). Эти процессы запускаются с использованием Autosys. Агент autosys в Windows всегда добавляет команду "cmd / c" к команде, которую я предоставляю в определении задания (см. Пример ниже)
C:\Windows\system32\cmd.exe /C foobar.exe
Само по себе это не проблема, но когда я пытаюсь уничтожить задание, отправив событие autosys KILLJOB (которое согласно документации Autosys отправляет в процесс прерывание с последующим сигналом уничтожения), foobar.exe не уничтожается, это родительский cmd.exe, который убит. foobar.exe заканчивается как потерянный процесс, и нам нужно войти на сервер, чтобы завершить его с помощью диспетчера задач вручную.
У кого-нибудь есть какое-либо решение, чтобы сигналы завершения от автосистемы распространялись на реальный процесс?
Благодарю.
1 ответ
Это известная ошибка при работе с заданиями Windows Autosys. Это из справочного руководства Autosys R11. Я никогда не пытался использовать это исправление. Удачи.
Будет ли foobar.exe работать без использования cmd.exe? Я бы попробовал это и посмотрел, правильно ли работает событие KILLJOB.
Windows не поддерживает концепцию групп процессов. Когда вы запускаете событие KILLJOB для задания, которое запускает исполняемый файл (.exe), KILLJOB убивает процесс, указанный в определении команды. Когда вы запускаете событие KILLJOB для задания, которое запускает что-то отличное от *.exe (например, *.bat, *.cmd или .com), KILLJOB завершает только процесс CMD.EXE, который использовался CA Workload Automation AE для запустить работу. Статус задания устанавливается в соответствии с кодом возврата прерванного процесса CMD.EXE и может быть одним из следующих: SUCCESS, FAILURE или TERMINATED. Процессы, запускаемые пользовательскими приложениями или пакетными (.bat) файлами, не уничтожаются. Чтобы обойти это ограничение, вы можете изменить свои программы так, чтобы они отслеживали сигнал от задания CA Workload Automation AE, работающего на компьютере с Windows, и вы можете реализовать этот параметр для события SEND_SIGNAL.*