精灵进程到底要不要屏蔽信号编写精灵进程,apue上没有提到要处理信号,而网上有些教程说要屏蔽很多信号。 到底需要屏蔽这些信号吗? 下面是在网上看到的例子 void main(int argc, char ** argv){ time_t now; int childpid, fd, fdtablesize; int error, in, out; signal(SIGTTOU,SIG_IGN); signal(SIGTTIN,SIG_IGN); signal(SIGTSTP,SIG_IGN); signal(SIGHUP,SIG_IGN); if( fork()!=0 ) exit(1); if( setsid()<0 ) exit(1); if( fork()!=0 ) exit(1); if( chdir("/tmp")==-1 )exit(1); for( fd=0, fdtablesize=getdtablesize(); fd< fdtablesize;fd++) close(fd); umask(0); signal(SIGCHLD,SIG_IGN); syslog(LOG_USER|LOG_INFO,"守护进程测试http://www.!\n"); while(1){ time(&now); syslog(LOG_USER|LOG_INFO,"当前时间:\t%s\t\t\n",ctime(&n ow)); sleep(6); }什么是精灵进程啊楼主是指后台守护进程吧。 有些信号是应该忽略的,我在Linux下忽略的信号是这些: signal(SIGINT, SIG_IGN); // 中断键被按下 signal(SIGQUIT, SIG_IGN); // 停止键被按下 signal(SIGPIPE, SIG_IGN); //客户端没有按正常过程断开 (Socket程序必要) //signal(SIGTERM, TerminateApplication); // 软件Kill,如果不想随便被kill,也可加此信号你想处理就处理,想忽略就忽略。 完全根据需要而定。上面那些信号都是和终端有关的信号,一般情况下都是由终端驱动程序发给当前程序的,既然已经没有控制终端了,所以说除了用户主动发送,再不会收到的信号不过是IPC的一种,看进程需求,这和是不是后台守护进程(“精灵进程”太别扭了)没关系。 话说 'coreutils'中也会屏蔽一些信号的倒,这才看见是06年的帖子,不要怪我顶起,我被楼上迷惑了:shutup:要的~在网络程序中 还是要屏蔽很多信号 比如 管道错误 |
|