У меня есть программа Java, которую я хотел бы запустить в качестве фонового процесса из PowerShell script, аналогично тому, как демон работает в Linux. PowerShell script должен сделать несколько вещей:
- Запустите программу как отдельный и отсоединенный процесс в фоновом режиме, то есть родительское окно может быть закрыто и процесс будет работать.
- Перенаправить стандартный вывод программы и стандартную ошибку в файлы.
- Сохраните PID фонового процесса в файл, чтобы его можно было завершить позже другим script.
У меня есть оболочка script в Linux, которая запускает программу следующим образом:
$ java -jar MyProgram.jar >console.out 2>console.err &
Я надеюсь повторить то же поведение в Windows, используя PowerShell script. Я попытался использовать Start-Process
с различными комбинациями опций, а также с созданием объектов System.Diagnostics.ProcessStartInfo
и System.Diagnostics.Process
, но до сих пор мне не повезло. PowerShell запускает программу как фоновый процесс, но программа внезапно завершается, когда окно DOS, которое запустило сеанс PowerShell, закрыто. Я хотел бы, чтобы он начинался в фоновом режиме и не зависел от начального окна команды.
Перенаправление вывода также было проблематичным, так как кажется, что потоки вывода и ошибок могут быть перенаправлены только в процессе, выполняется в том же окне (например, используя -NoNewWindow
).
Возможно ли это в PowerShell?