我正在尝试使用Shell脚本启动一个命令。我不在意它何时完成,也不关心如何完成或者为什么完成。我想要进程启动并运行,但是我希望能够立即返回到我的Shell。
我正在尝试使用Shell脚本启动一个命令。我不在意它何时完成,也不关心如何完成或者为什么完成。我想要进程启动并运行,但是我希望能够立即返回到我的Shell。
$ myscript &
请注意,这与将 &
放在您的脚本中是不同的,后者可能不会产生您期望的效果。&
符号在脚本内部,并且没有wait
命令,那么当脚本退出时,后台命令将被终止。 - Carl Norummyscript
修改终端环境,例如它是一个终端初始化命令,不需要立即执行并且可以延迟执行,那么它是否仍会修改终端环境? - noɥʇʎԀʎzɐɹƆ大家似乎都忘了disown
命令,这里是一个总结:
&
将作业置于后台。
disown
从shell的作业控制中移除进程,但仍将其连接到终端。
SIGHUP
(如果shell接收到SIGHUP
,它也会向该进程发送SIGHUP
,这通常会导致该进程终止)。nohup
断开进程与终端的连接,重定向其输出到nohup.out
并保护它免受SIGHUP
的干扰。
SIGHUP
。&
一起使用(作为后台作业)。nohup cmd
关闭终端不会中止程序,输出默认保存在 nohup.out 文件中。
你可以将此与后台运行组合使用,
nohup cmd &
并且摆脱输出
nohup cmd > /dev/null 2>&1 &
你也可以使用disown
命令。输入cmd
、Ctrl-Z
、bg
和disown
即可。
jobs
命令查看正在运行的作业。 - tripleee另外,当您运行程序后,可以按Ctrl-Z停止您的程序,然后输入
bg
将您上次停止的程序放入后台。(如果您启动了某些内容但没有使用'&',并且仍希望将其放入后台而不必重新启动,则此方法很有用)
screen -m -d $command$
命令可以在一个分离的会话中启动某个命令。你可以使用 screen -r
命令来附加到已经启动的会话。这是一个非常好用的工具,对于远程会话也非常有用。更多信息请参考 man screen
。
nohup
、&
和disown
之间的区别,请单击此处滚动到第四个答案。 - noɥʇʎԀʎzɐɹƆ