异步shell命令

Lor*_*nVS 86 linux bash shell ubuntu asynchronous

老实说,我无法相信我无法在网上找到解决方案.我碰到了一些看似相似的东西,但没有什么能真正做到我想要的......

我正在尝试使用shell脚本来启动命令.我不在乎是否/何时/如何/为何完成.我希望这个过程能够启动和运行,但我希望能够立即回到我的shell ...

希望这很清楚,我可能只是错过了一些令人难以置信的愚蠢

Car*_*rum 102

您可以在后台运行脚本:

$ myscript &
Run Code Online (Sandbox Code Playgroud)

请注意,这与放入&脚本内部不同,后者可能无法执行您想要的操作.

  • @JacobSharf,试一试,你会看到.如果`&`在脚本中并且你没有`wait`,那么当脚本退出时,后台命令将被终止. (8认同)
  • 将&放在命令行上并将其放在脚本中有什么区别?我不知道他们是不同的。 (2认同)

Ani*_*non 40

每个人都忘记了disown.所以这是一个总结:

  • & 把工作放在后台.

    • 使其在尝试读取输入时阻止,并且
    • 使shell不等待它的完成.
  • disown 从shell的作业控件中删除该进程,但它仍然将它连接到终端.

    • 其中一个结果是shell不会发送它SIGHUP(如果shell接收到SIGHUP它,它也会向SIGHUP进程发送一个,这通常会导致进程终止).
    • 显然,它只能应用于后台作业(因为前台作业运行时无法输入).
  • nohup断开进程与终端的连接,将其输出重定向到nohup.out并屏蔽它SIGHUP.

    • 该过程将不会收到任何已发送的SIGHUP.
    • 它完全独立于作业控制,原则上也可用于前台作业(虽然这不是很有用).
    • 通常与&(作为后台工作)一起使用.

  • 这是最好的答案.最全面的. (4认同)
  • 绝对是最好的答案,不知道为什么这么小的上升 (2认同)
  • @VladGanshin 没有。 (2认同)

Ste*_* B. 35

nohup cmd
Run Code Online (Sandbox Code Playgroud)

关闭终端时不会挂断.默认情况下输出到nohup.out

你可以将它与背景相结合,

nohup cmd &
Run Code Online (Sandbox Code Playgroud)

并摆脱输出,

nohup cmd > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

你也可以disown命令.键入cmd,Ctrl-Z,bg,disown

  • 很酷,疯狂的一切结合在一起,我认为订购起初会给我,但是我想您可以记住它(您写的内容或“ nohup cmd&> / dev / null 2>&1” :))) (2认同)

paj*_*ton 25

或者,在程序运行后,您可以按Ctrl-Z来停止程序然后键入

BG

这将你最后停止的程序放在后台.(如果你没有'&'而开始没有重新启动的东西,仍然想要它

  • 谢谢,那是一个很酷的小把戏...开始真正欣赏一些壳的优点... (2认同)

小智 5

screen -m -d $command$在分离的会话中启动命令。您可以使用screen -r附加到已启动的会话。这是一个很棒的工具,对于远程会话也非常有用。阅读更多man screen