signal overview
来源:互联网 发布:存货毕业设计数据分析 编辑:程序博客网 时间:2024/09/21 08:51
简要记录下signal 机制,
1. Linux 主要 signal 如下
Signal Value Action Comment
──────────────────────────────────────────────────────────────────────
SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process
SIGINT 2 Term Interrupt from keyboard //CTRL + C
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception //除0
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
SIGPIPE 13 Term Broken pipe: write to pipe with no
readers
SIGALRM 14 Term Timer signal from alarm(2) //alarm()
SIGTERM 15 Term Termination signal
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGCONT 19,18,25 Cont Continue if stopped
SIGSTOP 17,19,23 Stop Stop process
SIGTSTP 18,20,24 Stop Stop typed at tty
SIGTTIN 21,21,26 Stop tty input for background process
SIGTTOU 22,22,27 Stop tty output for background process
2. 主要系统调用 及 函数
raise(3) Sends a signal to the calling thread.
kill(2) Sends a signal to a specified process, to all members of a specified process group, or to all
processes on the system.
signal(2) signal - ANSI C signal handling
SYNOPSIS
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
3. sample
#include <stdio.h>#include <stdlib.h>#include <sys/wait.h>#include <sys/types.h>#include <sys/unistd.h>#include <string.h>#define MAXLINE 256static void sig_int(int);static void sig_tstp(int);static void sig_fpe(int);static void sig_alrm(int);void sig_int(int signo){printf("interrupt INT %d\n%% ", signo);}void sig_tstp(int signo){printf("interrupt TSTP %d\n%% ", signo);}void sig_fpe(int signo){printf("interrupt FPE %d\n%% ", signo);}void sig_alrm(int signo){printf("interrupt ALRM %d\n%% ", signo);}int main(int argc, char* argv[]){char buf[MAXLINE];pid_tpid;int status;printf("\usage : 1. no args --> execute command\n\ 2. a.out num--> 10/num, num == 0--> SIGFPE, num == 10 --> SIGINT, others --> SIGALRM\n");if(signal(SIGINT, sig_int) == SIG_ERR) {printf("signal error");}#if 0if(signal(SIGTSTP, sig_tstp) == SIG_ERR){printf("signal error");}#endifif(signal(SIGFPE, sig_fpe) == SIG_ERR){printf("signal error");}if(signal(SIGALRM, sig_alrm) == SIG_ERR){printf("signal error");}if(argc == 2){int bediv = atoi(argv[1]);int res = 10/bediv;if(res == 1){raise(SIGINT);}else if(res > 0){alarm(res);while(res){printf("%d...\n", res);res--;sleep(1); }}else{// do nothing}printf("res = %d\n", res);}printf("%% ");/* printf prompt (printf requires %% to print % )*/while(fgets(buf, MAXLINE, stdin) != NULL){buf[strlen(buf) - 1] = 0;/* replace new line with null */if((pid = fork()) < 0){printf("fork error");}else if(pid == 0)/* child */{execlp(buf, buf, (char *)0);printf("couldn't execute: %s\n", buf);exit(127);}/* parent */if((pid = waitpid(pid, &status, 0)) < 0 ){printf("waitpid error");}printf("%% ");}exit(0);}
4. demo
river@river-Satellite-L510:~/workspace/unix-adanced-programing/chapter1/signal$ ./a.out 3usage : 1. no args --> execute command 2. a.out num--> 10/num, num == 0--> SIGFPE, num == 10 --> SIGINT, others --> SIGALRM3...2...1...interrupt ALRM 14% res = 0% lsa.out signal_demo.c% timeUsage: time [-apvV] [-f format] [-o file] [--append] [--verbose] [--portability] [--format=format] [--output=file] [--version] [--quiet] [--help] command [arg...]% dateFri Feb 27 23:33:37 CST 2015% ^Cinterrupt INT 2^Z[21]+ Stopped ./a.out 3
- signal overview
- Overview
- Overview
- Overview
- Overview
- signal
- signal
- Signal
- signal
- signal
- signal
- signal
- signal
- signal()
- signal
- signal
- signal
- signal
- StringBuffer的常见方法及小技巧分享
- 使用 Umeng进行App 自定义更新
- How Getting Married and Having Kids Made Me a Better Programmer
- document获取对象三方法
- 热哦挺热富商大贾是东方四大第三方哦不
- signal overview
- Web前端性能优化
- MFC编辑框中按下回车后使光标换行
- Mybatis之#{}和${}的区别及其实现方式
- struts2中result的type跳转类型
- 1009. Product of Polynomials
- 黑马程序员——JAVA概述
- 防止表单重复提交的两种方式
- Android 双卡双待识别