异步Shell命令


100

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


2
相关信息,请参见Unix和Linux Stack Exchange上的nohup,disown和&之间的区别
jww

1
对于那些寻找一个更深入的答案,大约之间的分歧举行会谈nohup&disown请点击这里滚动到第四个答案
noɥʇʎԀʎzɐɹƆ

Answers:


116

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

$ myscript &

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


1
我知道这将变得容易,非常感谢……Linux并不是我的事,但我正努力加快速度……顺便说一句,与nohup结合使用是否可以工作?
LorenVS 2010年

2
将&放在命令行上并将其放在脚本中有什么区别?我不知道他们是不同的。
2013年

8
@JacobSharf,尝试一下,您会看到的。如果&脚本中包含,而您没有wait,则脚本退出时,后台命令将被杀死。
卡尔·诺鲁姆

哦。这解释了很多。我最近注意到了由此引起的一些影响。谷歌搜索实际上将我引导至此页面。谢谢
Jacob Sharf

如果myscript修改了终端环境,例如。这是一个不需要立即使用并且可以延迟的终端初始化命令,它还会修改终端环境吗?
16:02

58

大家都忘了disown。因此,这里是一个摘要:

  • & 将工作置于后台。

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

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

    • 该进程将不会收到任何发送的消息SIGHUP
    • 它完全独立于作业控制,并且原则上也可以用于前台作业(尽管这不是很有用)。
    • 通常用于&(作为后台作业)。

disown在Debian或OS X上找不到。我以为这是一个程序,但我似乎弄错了。它是什么?
jww


6
这是最好的答案。最全面。
noɥʇʎԀʎzɐɹƆ

3
绝对是最好的答案,不知道为什么这么少起伏
HeberLZ

1
@VladGanshin号
Ani Menon

39
nohup cmd

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

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

nohup cmd &

并摆脱输出,

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

您也可以disown执行命令。键入cmdCtrl-Zbgdisown


2
很酷,很疯狂,所有东西都结合在一起,我认为排序起初会给我,但是我想您可以记住它(您写的内容或“ nohup cmd&> / dev / null 2>&1” :))
LorenVS

我今晚偶然发现了。我已经与shell脚本进行了2天的战斗,这个建议使事情奏效了。谢谢你!
JD

太棒了,这非常有用。在后台模式下运行时,您可以使用偶尔检查一次命令的输出tail nohup.out,这将显示命令输出的最后10行。我将其用于rsync备份作业,以查看其当前所在的文件。
马丁·汉森

如果我这样做但想停止后台进程怎么办?
Stephan Bijzitter '16

正是为此目的,外壳程序在您启动作业时会打印作业标识符。您可以随时使用来查看正在运行的作业jobs
三人

26

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

bg

这会将您最后停止的程序置于后台。(如果您启动的内容中没有'&'且仍然希望在背景中不重新启动它就很有用)


2
谢谢,那是一个很酷的小技巧...开始真正地欣赏一些贝壳的优点了
LorenVS 2010年

3

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


@LadenkovVladislav我敢肯定您可以在RedHat上安装屏幕。我在CentOS上。
BuvinJ

在Ubuntu上,我想模拟Windows /批处理“开始”命令。即异步启动前台(gui)程序,然后继续执行Shell脚本。正是这样做的。
BuvinJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.