首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash:作为一个新的子进程,通过分叉进程来实现守护进程

bash:作为一个新的子进程,通过分叉进程来实现守护进程
EN

Stack Overflow用户
提问于 2016-05-25 08:43:55
回答 1查看 36关注 0票数 1

我有一个bash脚本,它在运行后应该将自己去守护。我的解决方案如下:

代码语言:javascript
复制
#!/bin/sh -xe
child() {
    echo child
}
child & # fork child
echo parent
kill $$ # kill parent

但是,将整个脚本本身放入函数child似乎并不是正确的做法。不幸的是,exec &不会把整个过程分拆成一个有背景的孩子。

怎样才能达到预期的效果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-25 09:13:09

我通常做这样的事情:

代码语言:javascript
复制
#!/bin/bash

if [ -z "$_IS_DAEMON" ]; then
    _IS_DAEMON=1 /bin/bash $0 "$@" &
    exit
fi

echo "I'm a deamon!"

脚本在后台有效地重新启动,同时退出由用户启动的脚本。

要识别守护状态,它使用一个环境变量(上面示例中的$_IS_DAEMON ):如果没有设置,假设由用户启动;如果设置,则假设开始作为守护进程的一部分。

要重新启动脚本本身,脚本只需调用$0 "$@"$0是用户启动的脚本的名称,"$@"是传递给脚本的参数,保留了空格和所有内容(与$*不同)。我通常也会显式地调用所需的shell,以避免在大多数*nix系统上的/bin/bash/bin/sh之间的混淆。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37431970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档