异步shell命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步shell命令相关的知识,希望对你有一定的参考价值。

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

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

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

答案

您可以在后台运行脚本:

$ myscript &

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

另一答案
nohup cmd

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

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

nohup cmd &

并摆脱输出,

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

你也可以disown命令。类型cmdCtrl-Zbgdisown

另一答案

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

  • &把工作放在后台。 使其在尝试读取输入时阻止,并且 使shell不等待它的完成。
  • disown从shell的作业控制中删除了进程,但仍然将它连接到终端。 其中一个结果是shell不会向它发送SIGHUP(如果shell接收到SIGHUP,它还会向进程发送一个SIGHUP,这通常会导致进程终止)。 显然,它只能应用于后台作业(因为前台作业运行时无法输入)。
  • nohup将进程与终端断开连接,将其输出重定向到nohup.out并将其与SIGHUP屏蔽。 该过程将不会收到任何发送的SIGHUP。 它完全独立于作业控制,原则上也可用于前台作业(虽然这不是很有用)。 通常与&一起使用(作为后台工作)。
另一答案

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

BG

这将你最后停止的程序放在后台。 (如果你没有'&'而开始没有重新启动的东西,仍然需要在背景中使用它,这很有用

另一答案

screen -m -d $command$在一个独立的会话中启动命令。您可以使用screen -r附加到已启动的会话。它是一个很棒的工具,对远程会话也非常有用。在man screen了解更多信息。

以上是关于异步shell命令的主要内容,如果未能解决你的问题,请参考以下文章

代码片段:Shell脚本实现重复执行和多进程

shell选取部分内容

Linux bash基础特性二

shell提供了哪些功能

shell 异步任务模拟多线程

VSCode自定义代码片段——git命令操作一个完整流程