首页 > 解决方案 > 由 powershell 脚本启动的外部命令是作为后台进程同步运行还是异步运行?

问题描述

如果我要从 powershell 脚本启动一个外部程序,然后再启动另一个程序,那么第一个程序启动是否等待退出,然后再运行下一个命令?

例如:

 # Assume pagent loaded our key...
 & {
      & pscp -sftp "<some-path>\text*.json" nonroot@somehost:/home/nonroot/json ;
      Write-Output $LASTEXITCODE;
      & plink nonroot@somehost  "/bin/processJSON.sh /home/nonroot/json";
      Write-Output $LASTEXITCODE;
  }

标签: powershell

解决方案


在 Windows 上,PowerShell 将始终同步等待控制台应用程序完成。对于 Win32 应用程序,如果命令的输出没有被重定向,那么命令将异步运行。如果它被重定向,则 PowerShell 将等待命令完成。例如,notepad从命令行运行将启动记事本与 PowerShell 异步运行,但如果您运行,notepad | out-null则 PowerShell 将等到记事本进程退出后再继续。在 Linux 或 MacOS 上,“windows”和“non-windows”应用程序之间没有操作系统区别,因此 PowerShell 始终等待子进程完成。因此,除非应用程序将自己置于后台(许多 GUI 工具都会这样做),&例如xedit &


推荐阅读