由 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;
}

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

最新更新