【发布时间】:2015-08-03 17:04:31
【问题描述】:
通常我会在背景中添加“&”字符来开始我的流程,例如:
user@pc:~$ my_script &
但是如何在没有“&”字符的情况下在后台制作它?
#!/bin/bash
#What can I add here to hide current process ($$) and to release focus ?
start_server()
{
#my script here with infinite loop ...
}
谢谢大家。
【问题讨论】:
-
也许使用了一个shell脚本?看到这个问题:stackoverflow.com/questions/3430330/…
-
&将在后台运行任务但后台任务不等于守护进程。它仍然连接到您启动它的终端。关闭终端后,进程将收到SIGHUP并死亡。您可以使用nohup命令或bash 的内置作业控制disown来防止这种情况发生。但是,当您想使用disown时,必须先将进程发送到后台 -
顺便说一句,一般来说,这是运行服务的错误方式。考虑使用操作系统的进程监控系统——在 MacOS 上启动,在 Ubuntu 上启动,在 Fedora 和 RHEL/CentOS 7 上使用 systemd——或者安装你选择的一个; DJB 的 daemontools 及其 BSD 许可的 clone runit 是不错的选择,可以在任何符合 POSIX 的操作系统上运行,而无需替换 init。
-
@CharlesDuffy 在 Ubuntu (14.10) 上,它也已经是 systemd 了。他们整合它的速度真的很快,我很惊讶。顺便说一句,在基于 Debian 的系统上,您可以使用
start-stop-daemon,它是dpkg软件包的一部分,这意味着它始终被安装。恕我直言,确实有一个用例,您想启动一个守护程序但不希望init控制它。start-stop-daemon会做到的。
标签: bash