为何从PowerShell调用时VSCode与WinMerge的终止行为存在差异?
VSCode与WinMerge在PowerShell 5.1中的行为差异原因
核心差异源于两个程序的启动方式和进程关联关系不同:
VSCode的
code命令是独立启动器code并非直接运行VSCode主进程,它是一个轻量的启动包装程序(实际是code.cmd批处理或对应可执行文件)。这个启动器的作用是真正拉起VSCode的核心进程(如Code.exe),随后立即退出自身,彻底切断和PowerShell的父子进程关联。因此PowerShell会判定命令执行完成,立刻返回控制权;而VSCode主进程不再属于PowerShell的子进程树,PowerShell退出时也不会终止它。WinMergeU是直接作为PowerShell子进程启动
WinMergeU.exe是WinMerge的主程序,被PowerShell直接启动后,默认会与PowerShell的控制台窗口建立关联,成为PowerShell的子进程。这种情况下,PowerShell会等待该进程退出才会释放控制权;当PowerShell退出时,会终止所有关联的子进程,WinMerge也会随之关闭。
如果需要让WinMerge实现类似VSCode的行为,可以使用Start-Process WinMergeU命令,该命令会将WinMerge作为独立进程启动,切断与PowerShell的父子关联,此时PowerShell会立即返回控制权,退出也不会影响WinMerge运行。
内容的提问来源于stack exchange,提问作者aruku7230
相关产品推荐
相关产品推荐

