Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash-c是否像nohup一样工作?_Bash_Daemon_Nohup - Fatal编程技术网

bash-c是否像nohup一样工作?

bash-c是否像nohup一样工作?,bash,daemon,nohup,Bash,Daemon,Nohup,在redhat中使用旧的initscript时,我遇到了这样的问题 守护进程--user$user--pidfile$pidfile“cmd>>/var/log/cmd.log 2>&1&“ 它似乎很可疑,因为它没有使用nohup。但是,该程序工作正常,即使控制终端退出,也能保持运行。进一步调查后,我发现一个命令,例如bash-c'sleep 1000&',即使调用它的终端退出(如果没有nohup,这是不可能的)。我用最新的ubuntu验证了这种行为 所以我的问题是,这种行为是众所周知的吗?也就

在redhat中使用旧的initscript时,我遇到了这样的问题

守护进程--user$user--pidfile$pidfile“cmd>>/var/log/cmd.log 2>&1&“

它似乎很可疑,因为它没有使用nohup。但是,该程序工作正常,即使控制终端退出,也能保持运行。进一步调查后,我发现一个命令,例如
bash-c'sleep 1000&'
,即使调用它的终端退出(如果没有nohup,这是不可能的)。我用最新的ubuntu验证了这种行为


所以我的问题是,这种行为是众所周知的吗?也就是说,我可以在init脚本中使用它而不是使用nohup吗?或者它是bash中的一个bug?

这激起了我的好奇心:SIGHUP的行为和以前一样吗?第一条线索来自
shopt
上的bash手册页:

huponexit如果设置,则当交互式登录shell退出时,bash将向所有作业发送SIGHUP

在一个普通的Ubuntu 12.04安装中,huponexit默认为“off”,即使在交互式会话中也是如此。作为一个经验主义者,我希望看到它的实际应用:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

void
hupped(int i)
{
    fprintf(stderr, "received SIGHUP 0x%x\n", i);
    exit(1);
}

int main(int argc,char * argv[])
{
    fprintf(stderr, "registering SIGHUP handler for PID %d\n", getpid());
    signal(SIGHUP, hupped);
    sleep(3600*5);
    return 0;
}
#包括
#包括
#包括
#包括
无效的
hupped(国际一级)
{
fprintf(stderr,“接收到的信号0x%x\n”,i);
出口(1);
}
int main(int argc,char*argv[])
{
fprintf(stderr,“为PID%d注册SIGHUP处理程序”,getpid());
信号灯(信号灯、HUP);
睡眠(3600*5);
返回0;
}
即使将stdin和stdout绑定到tty,它也不会在shell退出时收到信号,这与文档相符。正如预期的那样,该进程将成为init的子进程,并且与pty的连接将关闭


从默认设置来看,SIGHUP对于bash交互会话来说并不“有趣”。然而,只要你相信这一点,你就会发现一个反例,很可能是在最糟糕的时候。

Bash只在交互会话中进行作业控制(包括发送作业通知)。@jordanm这是一个答案;为什么不做一个呢?我也这么想。对于bash来说,这似乎并不普遍适用。