最近研究linux守护进程的写法,在这里做个备份:
示例源代码:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
int main()
{
pid_t pid;
/*第一次,脱离主进程的进程组*/
if((pid = fork()) < 0)
{
return -1;
}
else if(pid > 0)
{
/*主进程退出*/
/*exit(0);*/
_exit(0);
}
/*创建session前进程继承父进程的进程组*/
/*创建一个新的会话session后*/
/*当前进程变为新的会话的会话头进程*/
/*以及新的进程组的进程组头进程*/
if(setsid() < 0)
{
return -1;
}
/*当会话头进程(即首次fork产生的子进程)终止时*/
/*其会话中的所有进程(即再次fork产生的子进程)*/
/*都会收到SIGHUP信号*/
signal(SIGHUP, SIG_IGN);
/*第二次fork的目的*/
/*新的子进程不在是一个会话头进程*/
/*确保子进程将来即使打开一个终端设备*/
/*也不会自动获得控制终端*/
if((pid = fork()) < 0)
{
return -1;
}
else if(pid > 0)
{
_exit(0);
}
while(1)
{
printf("while .\n");
sleep(1);
}
return 0;
}