当前位置: 首页>>技术教程>>正文


linux – 异步Shell命令

, , , ,

问题描述

老实说,我不敢相信我无法在网上找到解决方案。我遇到了一些看似相似的事情,但没有任何事情能真正实现我想要的…

我正在尝试使用Shell脚本来启动命令。我不在乎是否/何时/如何/为什么完成。我希望该过程开始并运行,但是我希望能够立即回到我的 shell …

希望这已经足够清楚了,我可能只是想念一些非常愚蠢的东西

最佳回答

您可以只在后台运行脚本:

$ myscript &

请注意,这与将&放入脚本中不同,后者可能无法满足您的要求。

次佳回答

每个人都忘记了disown。因此,这里是一个摘要:

  • &将作业放在后台。

    • 使其在尝试读取输入时阻塞,并且

    • 使 shell 不等待其完成。

  • disown从Shell的作业控件中删除了该进程,但仍将其连接到终端。

    • 结果之一是 shell 程序将不会向其发送SIGHUP(如果 shell 程序接收到SIGHUP,它还将向该进程发送SIGHUP,这通常会导致该进程终止)。

    • 显然,它只能应用于后台作业(因为在前台作业运行时无法输入)。

  • nohup断开该进程与终端的连接,将其输出重定向到nohup.out并将其与SIGHUP屏蔽。

    • 该过程不会收到任何发送的SIGHUP

    • 它完全独立于作业控制,并且原则上也可以用于前台作业(尽管这不是很有用)。

    • 通常与&一起使用(作为后台作业)。

第三种回答

nohup cmd

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

您可以将此与背景结合使用,

nohup cmd &

并摆脱输出,

nohup cmd > /dev/null 2>&1 &

您也可以使用disown命令。类型cmdCtrl-Zbgdisown

第四种回答

或者,在程序运行后,您可以点击Ctrl-Z,这将停止您的程序,然后键入

bg

这会将您最后停止的程序置于后台。 (如果您在没有’&’的情况下启动了某些内容,但仍希望在背景中使用它而不重新启动它,则很有用)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8801.html,未经允许,请勿转载。