PowerShell脚本启动的外部命令是否与后台进程同步或异步运行?

时间:2018-05-24 02:36:25

标签: 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;
  }

1 个答案:

答案 0 :(得分:1)

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