📄 00000003.htm
字号:
<BR> FILE *fp; <BR> <BR> pid_t pid; <BR> <BR> <BR> <BR> exit(-1); <BR> <BR> } <BR> <BR> <BR> act.sa_handler = quit; <BR> <BR> act.sa_flags = 0; <BR> <BR> sigemptyset(&act.sa_mask); <BR> <BR> sigaction(SIGTERM,&act,NULL); <BR> <BR> sigaction(SIGHUP,&act,NULL); <BR> <BR> sigaction(SIGINT,&act,NULL); <BR> <BR> sigaction(SIGQUIT,&act,NULL); <BR> <BR> sigaction(SIGUSR1,&act,NULL); <BR> <BR> sigaction(SIGUSR2,&act,NULL); <BR> <BR> <BR> for (;;) { <BR> <BR> sleep(3); <BR> <BR> } <BR> <BR> } <BR> <BR> <BR> 编译: <BR> <BR> <BR> gcc -o ex1 lock.c <BR> <BR> <BR> 执行 <BR> <BR> <BR> ./ex1 <BR> <BR> <BR> daemon on duty! <BR> <BR> <BR> 送信号 <BR> <BR> <BR> 我们先找出该守护神程式的pid <BR> <BR> <BR> PID=`cat /var/run/lock.pid` <BR> <BR> <BR> 接下来利用kill来送信号 <BR> <BR> <BR> kill $PID <BR> <BR> <BR> Receive signal 15 <BR> <BR> <BR> 程式将会结束,并且/var/run/lock.pid将会被删除掉,以便下一次daemon再启 <BR> <BR> 动。注意到如果quit函数内,没有放exit(),程式将永远杀不掉。 <BR> <BR> <BR> 接下来送一些其它的信号试试看。 <BR> <BR> ./ex1 <BR> <BR> PID=`cat /var/run/lock.pid` <BR> <BR> kill -HUP $PID <BR> <BR> <BR> Receive signal 1 <BR> <BR> <BR> 您可以自行试试 <BR> <BR> kill -INT $PID <BR> <BR> kill -QUIT $PID <BR> <BR> kill -ILL $PID <BR> <BR> . <BR> <BR> . <BR> <BR> . <BR> <BR> 等等这些信号,看看他们的结果如何。 <BR> <BR> <BR> 信号的定义 <BR> <BR> <BR> 在/usr/include/signum.h中有各种信号的定义 <BR> <BR> #define SIGHUP 1 /* Hangup (POSIX). */ <BR> <BR> #define SIGINT 2 /* Interrupt (ANSI). */ <BR> <BR> #define SIGQUIT 3 /* Quit (POSIX). */ <BR> <BR> #define SIGILL 4 /* Illegal instruction (ANSI). */ <BR> <BR> #define SIGTRAP 5 /* Trace trap (POSIX). */ <BR> <BR> #define SIGABRT 6 /* Abort (ANSI). */ <BR> <BR> #define SIGIOT 6 /* IOT trap (4.2 BSD). */ <BR> <BR> #define SIGBUS 7 /* BUS error (4.2 BSD). */ <BR> <BR> #define SIGFPE 8 /* Floating-point exception (ANSI). <BR> <BR> */ <BR> <BR> #define SIGKILL 9 /* Kill, unblockable (POSIX). */ <BR> <BR> #define SIGUSR1 10 /* User-defined signal 1 (POSIX). */ <BR> <BR> <BR> #define SIGSEGV 11 /* Segmentation violation (ANSI). */ <BR> <BR> <BR> #define SIGUSR2 12 /* User-defined signal 2 (POSIX). */ <BR> <BR> <BR> #define SIGPIPE 13 /* Broken pipe (POSIX). */ <BR> <BR> #define SIGALRM 14 /* Alarm clock (POSIX). */ <BR> <BR> #define SIGTERM 15 /* Termination (ANSI). */ <BR> <BR> #define SIGSTKFLT 16 /* ??? */ <BR> <BR> #define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */ <BR> <BR> #define SIGCHLD 17 /* Child status has changed (POSIX). <BR> <BR> */ <BR> <BR> #define SIGCONT 18 /* Continue (POSIX). */ <BR> <BR> #define SIGSTOP 19 /* Stop, unblockable (POSIX). */ <BR> <BR> #define SIGTSTP 20 /* Keyboard stop (POSIX). */ <BR> <BR> #define SIGTTIN 21 /* Background read from tty (POSIX). <BR> <BR> */ <BR> <BR> #define SIGTTOU 22 /* Background write to tty (POSIX). <BR> <BR> */ <BR> <BR> #define SIGURG 23 /* Urgent condition on socket (4.2 <BR> <BR> BSD). */ <BR> <BR> #define SIGXCPU 24 /* CPU limit exceeded (4.2 BSD). */ <BR> <BR> #define SIGXFSZ 25 /* File size limit exceeded (4.2 <BR> <BR> BSD). */ <BR> <BR> #define SIGVTALRM 26 /* Virtual alarm clock (4.2 BSD). */ <BR> <BR> <BR> #define SIGPROF 27 /* Profiling alarm clock (4.2 BSD). <BR> <BR> */ <BR> <BR> #define SIGWINCH 28 /* Window size change (4.3 BSD, Sun). <BR> <BR> */ <BR> <BR> #define SIGPOLL SIGIO /* Pollable event occurred (System <BR> <BR> V). */ <BR> <BR> #define SIGIO 29 /* I/O now possible (4.2 BSD). */ <BR> <BR> #define SIGPWR 30 /* Power failure restart (System V). <BR> <BR> */ <BR> <BR> #define SIGUNUSED 31 <BR> <BR> <BR> 函数宣告: <BR> <BR> <BR> Signal Operators <BR> <BR> <BR> int sigemptyset(sigset_t *set); <BR> <BR> int sigfillset(sigset_t *set); <BR> <BR> int sigaddset(sigset_t *set, int signum); <BR> <BR> int sigdelset(sigset_t *set, int signum); <BR> <BR> int sigismember(const sigset_t *set, int signum); <BR> <BR> <BR> Signal Handling Functions <BR> <BR> <BR> int sigaction(int signum, const struct sigaction *act,struct <BR> <BR> sigaction *oldact); <BR> <BR> int sigprocmask(int how, const sigset_t *set, sigset_t <BR> <BR> *oldset); <BR> <BR> int sigpending(sigset_t *set); <BR> <BR> int sigsuspend(const sigset_t *mask); <BR> <BR> <BR> Structure Signal Action <BR> <BR> struct sigaction { <BR> <BR> void (*sa_handler)(int); <BR> <BR> sigset_t sa_mask; <BR> <BR> int sa_flags; <BR> <BR> void (*sa_restorer)(void); <BR> <BR> } <BR> <BR> <BR> <BR> <BR> <BR> <BR> OK STATION, Webmaster, Brian Lin <BR> <BR> <BR> <BR> <BR>-- <BR>在江湖中,只要拿起了刀,就是一场无涯的梦。 <BR> <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 159.226.21.168] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -