当前位置: 技术问答>linux和unix
Daemon问题
来源: 互联网 发布时间:2015-05-23
本文导语: 我的一个程序调用如下的代码,变成Daemon后,运行时原来往终端显示的内容出现在/dev/ttyS1上,望指教。 环境Redhat 6.2 void sessdetach() { int daemfd; struct sigaction act; act.sa_handler = SIG_IGN; act.sa_flags = 0; sigemptyset(&(act.s...
我的一个程序调用如下的代码,变成Daemon后,运行时原来往终端显示的内容出现在/dev/ttyS1上,望指教。
环境Redhat 6.2
void sessdetach()
{
int daemfd;
struct sigaction act;
act.sa_handler = SIG_IGN;
act.sa_flags = 0;
sigemptyset(&(act.sa_mask));
if (getppid() != 1) {
sigaction(SIGTTOU, &act, NULL);
sigaction(SIGTTIN, &act, NULL);
sigaction(SIGTSTP, &act, NULL);
if( fork() != 0 )
exit(0);
setsid();
}
for (daemfd = getdtablesize() -1; daemfd >= 0; daemfd--) {
close(daemfd);
}
}
环境Redhat 6.2
void sessdetach()
{
int daemfd;
struct sigaction act;
act.sa_handler = SIG_IGN;
act.sa_flags = 0;
sigemptyset(&(act.sa_mask));
if (getppid() != 1) {
sigaction(SIGTTOU, &act, NULL);
sigaction(SIGTTIN, &act, NULL);
sigaction(SIGTSTP, &act, NULL);
if( fork() != 0 )
exit(0);
setsid();
}
for (daemfd = getdtablesize() -1; daemfd >= 0; daemfd--) {
close(daemfd);
}
}
|
fork两次试一试,具体可以参考
|
找个简单的httpd看一下就知道怎么做了。
|
《UNIX环境高级编程》中专门有一章讲这个东西的,仔细看一下就知道了。方法基本上就是linaxing(牛牛) 说的。
|
基本思路是脱离控制终端(fork后父退出,子用setsid),重定向标准输出(到log文件或者/dev/null)。
|
/**
使得进程变成daemon process
*/
int
daemon_init(void)
{
pid_t pid;
if ( (pid = fork())
使得进程变成daemon process
*/
int
daemon_init(void)
{
pid_t pid;
if ( (pid = fork())