为什么cmd不保持shell脚本进程存活?



我有一个powershell脚本,它启动x个作业。如果我从powershell启动它,进程保持活跃,但如果从cmd启动,脚本完成后,每个进程都停止。

我可以保持进程存活的唯一方法是在脚本中放置Sleep。为什么呢?

这是我如何从cmd启动脚本:Powershell.exe。 cpu_load的脚本。ps1 - utilzecorepercent 50

PowerShell.exe有两种主要的操作模式。

  1. 可以运行多个脚本或单个命令的终端模式。
  2. 一种执行模式,PowerShell.exe开始运行,然后执行作为参数传递给它的脚本,直到脚本退出,然后PowerShell.exe退出或关闭。

在终端模式下,您分配的变量,您启动的作业,以及更多,将保持活动和可用,直到您退出PowerShell.exe终端。类似地,在执行模式下,一切都保持可用,直到脚本退出—退出PowerShell.exe。

CMD终端允许您执行exe程序,如Notepad.exe和PowerShell.exe,但您必须了解CMD. exe本身是一个可执行程序,通常通过Windows桌面中的某个快捷方式运行。

事实上,CMD是它自己的exe程序意味着它没有"意识";任何类型的其他exe程序,因此,它不会保留任何其他exe程序关闭后的任何内容。

唯一的解决方案是类似于iRon关于使用"Wait-Job"和/或"receive - job"的评论,其中,以某种方式,PowerShell.exe保持运行直到作业完成。

最新更新