http://www.openchess.org/noitatsko/programming/ (2001-05-24 16:47:48)
信号处理
--------------------------------------------------------------------------------
信号处理概说
送出信号
接收信号
信号的处理
任务控制
--------------------------------------------------------------------------------
POSIX IPC
reliable/unreliable
reentrant
pending
sending signals
catching signals
manipulating
signal definitions
--------------------------------------------------------------------------------
信号singals
信号的处理可以用一大章来写,涉及的层面也会深入整个作业系统中,我并不打算这样做,因为您可能会越搞越迷糊。这里我只告诉您如何接上信号,在实用的层面上,这样便很够用了。您可以先利用这些基本的技巧来撰写程式,等到有进一步高等应用的需要时,找一本较深入的UNIX Programming教材,专门研究signal的写法。
一般简单的signal写法如下:
void mysignal(int signo)
{
/* my signal handler */
}
void initsignal(void)
{
struct sigaction act;
act.sa_handler = mysignal;
act.sa_flags = 0;
sigemptyset(&act.sa_mask);
sigaction(SIGHUP,&act,NULL);
sigaction(SIGINT,&act,NULL);
sigaction(SIGQUIT,&act,NULL);
sigaction(SIGILL,&act,NULL);
sigaction(SIGTERM,&act,NULL);
}
例一: lock.c
在fork的例三中提到,在daemon被杀掉时,需要在离开前,将/var/run/lock.pid删除。这里我们可以利用signal来处理这件事。
#include
#include
#include
#include
#define LOCK_FILE "/var/run/lock.pid"
void quit(int signo)
{
printf("Receive signal %d\n",signo);
unlink(LOCK_FILE);
exit