在 bash 中,与号 (&) 可用于在后台运行命令并在命令完成运行之前将交互控制返回给用户。在 Powershell 中是否有等效的方法来执行此操作?

在 bash 中的用法示例:

 sleep 30 &

最佳答案

只要命令是可执行文件或具有关联可执行文件的文件,请使用 Start-Process (可从 v2 获得):

Start-Process -NoNewWindow ping google.com

您还可以将其添加为个人资料中的函数:
function bg() {Start-Process -NoNewWindow @args}

然后调用变为:
bg ping google.com

在我看来,Start-Job 对于在后台运行进程的简单用例来说是一种矫枉过正:
  • Start-Job 无权访问您现有的范围(因为它在单独的 session 中运行)。你不能做“开始工作 {notepad $myfile}”
  • Start-Job 不保留当前目录(因为它在单独的 session 中运行)。您不能在 myfile.txt 位于当前目录中的位置执行“Start-Job {notepad myfile.txt}”。
  • 输出未自动显示。您需要使用作业的 ID 作为参数运行 Receive-Job。

  • 注意:关于您的初始示例,“bg sleep 30”不起作用,因为 sleep 是 Powershell commandlet。 Start-Process 仅在您实际 fork 进程时才起作用。

    关于用于派生/运行后台进程的 bash 与符号 (&) 的 Powershell 等效项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/185575/

    10-14 12:43
    查看更多