异步shell命令

时间:2010-03-03 01:05:35

标签: linux bash shell ubuntu asynchronous

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

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

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

5 个答案:

答案 0 :(得分:89)

您可以在后台运行脚本:

$ myscript &

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

答案 1 :(得分:32)

nohup cmd
关闭终端时,

不会挂起。默认输出转到nohup.out

您可以将其与背景相结合,

nohup cmd &

并摆脱输出,

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

你也可以disown一个命令。输入cmdCtrl-Zbgdisown

答案 2 :(得分:32)

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

  • &将工作置于后台。

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

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

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

答案 3 :(得分:24)

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

  

BG

将您上次停止的程序放在后台。 (如果您在没有'&'的情况下启动了某些内容并且仍然希望它在背景资料中而不重新启动它,则非常有用)

答案 4 :(得分:0)

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