当前位置: 技术问答>linux和unix
请教:在进程运行中将其转换成守护进程会怎么样?
来源: 互联网 发布时间:2016-09-23
本文导语: 一般守护进程的转换好像都是在程序一开始就先完成了.现在我的转换代码如下: void ignore_signal(int signalValue) { struct sigaction sig; sig.sa_handler = SIG_IGN; sig.sa_flags = 0; sigemptyset(&sig.sa_mask); ...
一般守护进程的转换好像都是在程序一开始就先完成了.现在我的转换代码如下:
如果我程序一开始并不立即进入守护进程,而是先运行了一段时间,后来因为一条命令或者什么事件触发之后才通过
这段代码切入守护进程,我的这个进程除了丢失命令行输入以外,会不会影响到其他部分的运行?
另外守护进程有没有办法重新获得控制台的输入,以便进行控制?
谢谢~
void ignore_signal(int signalValue)
{
struct sigaction sig;
sig.sa_handler = SIG_IGN;
sig.sa_flags = 0;
sigemptyset(&sig.sa_mask);
sigaction(signalValue, &sig, NULL);
}
void translate_current_process_to_daemon()
{
pid_t pid;
if((pid = fork()) != 0)
{
exit(0);
}
setsid();
ignore_signal(SIGINT);
ignore_signal(SIGHUP);
ignore_signal(SIGQUIT);
ignore_signal(SIGTTOU);
ignore_signal(SIGTTIN);
ignore_signal(SIGCHLD);
ignore_signal(SIGTERM);
ignore_signal(SIGHUP);
ignore_signal(SIGPIPE);
if((pid = fork()) != 0)
{
exit(0);
}
umask(0);
}
如果我程序一开始并不立即进入守护进程,而是先运行了一段时间,后来因为一条命令或者什么事件触发之后才通过
这段代码切入守护进程,我的这个进程除了丢失命令行输入以外,会不会影响到其他部分的运行?
另外守护进程有没有办法重新获得控制台的输入,以便进行控制?
谢谢~
|
一般来说需要用dup标准输入跟标准输出到一个指定的输出设备,一般为/dev/null.
想重新获得控制台的输入,可以考虑重新打开控制终端设备,把后dup标准输入
想重新获得控制台的输入,可以考虑重新打开控制终端设备,把后dup标准输入