这几天在学习编写Unix下的程序,在这里贴出一个方法示例:
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
void init_venes(void)
{
int pid;
int i;
/* 忽略终端I/O,STOP信息号 */
signal(SIGTTOU, SIG_IGN);
signal(SIGTTIN, SIG_IGN);
signal(SIGTSTP, SIG_IGN);
signal(SIGHUP, SIG_IGN);
if((pid=fork()) > 0)
{
exit(0); /*是父进程,结束父进程*/
}
else if(pid<0)
{
exit(1); /*fork失败,退出*/
}
setsid(); /*第一子进程成为新的会话组长和进程组长*/
if((pid=fork()) > 0)
{
exit(0); /*是第一子进程,结束第一子进程*/
}
else if(pid<0)
{
exit(1); /*fork失败,退出*/
}
for(i=0; i<NOFILE; ++i)
close(i); /*关闭打开的文件描述符*/
chdir("/tmp"); /*改变工作目录到/tmp,以防止关机时某些设备忙碌的问题*/
umask(0); /*重设文件创建掩模*/
signal(SIGCHLD, SIG_IGN); /* 忽略SIGCHLD信号 */
return;
}
程序里都做了注释,这个方法其实是根据网上其它作者的改写的,贴在这里记录一下,以免忘记!