nohup在后台运行一个进程。Windows是否有等效功能?
nohup在后台运行一个进程。Windows是否有等效功能?
Answers:
您可以使用start命令在命令窗口的后台运行进程。
command1
command2
start command3
command4
command2等待直到command1完成,但是command4不要等待command3完成。
并且如果您需要独立于登录用户运行,则需要将其作为服务启动,并且可以使用anysrv.exe
exec(<some windows executable>)
。我可以在Process Explorer中清楚地看到父子关系,而无论我从内部开始还是exec()
无法生存。更正一下,如果我cmd.exe
从“开始”菜单启动一个似乎正常的方法,在该菜单中,cmd.exe
退出时启动的进程似乎“正确地”孤立了。显然,我需要更好地理解这一点。:-(
您可能需要查看Windows服务。您可以下载一些工具来将任何进程作为Windows服务托管。这将导致该进程在Windows启动时在后台加载,因此,如果不需要用户交互,则应该可以像这样托管它。
您所追求的工具称为srvany.exe。
在Windows中,让用户启动的进程在注销后继续运行的唯一方法(即“ nohup”的作用)是通过“计划任务”或作为Windows服务启动它。当用户注销时,其登录会话中的所有进程将被杀死。
如果您想尝试“计划任务”方法,那么您将想知道如何以编程方式创建它们。该Win32_ScheduledJob WMI类可以做到这一点。此处提供了详细的文档:http : //www.microsoft.com/technet/scriptcenter/guide/sas_man_rsxs.mspx? mfr = true基本上,您正在做的是(从Microsoft偷偷地偷了):
Set objService = GetObject("winmgmts:\\.")
Set objNewJob = objService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create("Program-to-execute.exe", "ugly-formatted-time-string-per-Microsoft-docs",True ,1 OR 4 OR 16, , ,JobID)
If Err.Number = 0 Then
Wscript.Echo "New Job ID: " & JobID
Else
Wscript.Echo "An error occurred: " & errJobCreated
End If
要授予“ joe用户”创建计划任务的功能,您必须修改%SystemRoot%\ Tasks文件夹上的权限。有关此方面的一些信息,请参见此处:http : //technet.microsoft.com/zh-cn/library/cc785125(WS.10).aspx
START
命令不会分离,即它仍然是创建它的过程的子代。在您的示例中,这意味着一旦母进程退出,“ command3”将死亡。Unix绕过这种做法被称为“ fork-twice”,但我不知道Windows中的等效方法。