我有一个Java程序,我想从PowerShell脚本启动它作为后台进程,类似于守护进程在Linux上运行的方式。PowerShell脚本需要做几件事:
1.在后台将程序作为一个独立的进程运行,这意味着父窗口可以关闭,进程可以继续运行。
1.将程序的标准输出和标准错误重定向到文件。
1.将后台进程的PID保存到一个文件中,以便稍后可以由另一个脚本终止它。
我在Linux上有一个shell脚本,它像这样启动程序:
$ java -jar MyProgram.jar >console.out 2>console.err &
我希望使用PowerShell脚本在Windows上复制相同的行为。我尝试过使用Start-Process
和各种选项组合,以及创建System.Diagnostics.ProcessStartInfo
和System.Diagnostics.Process
对象,但到目前为止我没有任何运气。PowerShell作为后台进程启动程序,但是当启动PowerShell会话的DOS窗口关闭时,该程序突然终止。我希望它在后台启动,并且独立于启动它的命令窗口。
输出重定向也很麻烦,因为输出和错误流似乎只能在同一窗口中运行的进程中重定向(例如,使用-NoNewWindow
)。
这类事情在PowerShell中可能吗?
6条答案
按热度按时间kupeojn61#
使用jobs执行以下操作:
另一个选项是
Start-Process
:vzgqcmou2#
考虑使用任务调度器来完成这个任务。定义一个任务并设置它而不使用任何触发器。这将允许你简单地“运行”(手动触发)任务。
您可以使用ScheduledTasks powershell模块设置和/或触发计划任务,也可以使用GUI。
qzlgjiam3#
这是一个老帖子,但因为我有它的工作很好,认为它可能有助于分享。这是调用'java'而不是'javaw',这可能是你的问题。运行了我自己使用我的JEdit java程序通过powershell启动它。
您可以将其转换为一个小函数,然后再转换为一个别名,以便在Powershell中轻松启动。
bqf10yzr4#
老问题了,但因为我有同样的目标,我用@use的答案来实现它。
下面是我的代码:)
vwkv1x7d5#
尝试使用PowerShell执行此操作:
或
这将启动一个隐藏的分离cmd窗口,并相应地重定向std流。
f3temu5u6#
解决方案是将
Start-Process
与nohup
组合:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-7.1#example-8--create-a-detached-process-on-linux