powershell - 由 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”和“non-windows”应用程序之间没有操作系统区别,因此 PowerShell 始终等待子进程完成。因此,除非应用程序将自己置于后台(许多 GUI 工具都会这样做),&
例如xedit &
。
推荐阅读
- xcode - 为版本 12 中的 Xcode 组织名称设置默认值
- python - 亮化 HSV 图像中的暗片
- reactjs - 反应导航 goBack() 并设置父状态
- python - Visual Studio Code 中的 IntelliSense 不适用于 python 包
- javascript - Javascript,检测是文本实际上未选中
- cytoscape.js - 从一个节点拖动到另一个节点时,Cytoscape 边缘处理重影预览显示“未定义”
- python - 如何删除以数字为索引名称的列?
- pyspark - Pyspark 数据框:使用似乎不是 orderBy 的 .orderBy 重新分区
- java - Jackson 处理字符串(如果已注释)
- c++ - 在 gcc 9.3 中编译但在 gcc 10.2 中不编译的 C++ 代码