1.管道:
进程间通信最简单的形式
2.信号:
内核层和用户层通信的一种方式
1.信号类型:
-
SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
-
SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
-
SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
-
SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
-
SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
-
SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
-
SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
-
SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
-
SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
-
SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
-
SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
-
SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
-
SIGRTMAX-1 64) SIGRTMAX
可以从终端输入:
SIGINT ctrl+c
SIGQUIT ctrl+\
SIGTSTP ctrl+z
9号和19号信号
SIGKILL 进程结束
SIGSTOP 进程挂起
SIGSEGV:表示内核操作内存错误
SIGUSR1:用户可以使用该信号实现通信
SIGCHLD:表示该进程有一个子进程结束了
SIGPIPE:表示管道破裂
SIGIO:表示IO事件发生
2.信号的处理方式:
1.缺省:
按照默认的方式处理信号
2.忽略:
不处理信号
3.捕捉:
按照指定的方式处理信号
9号SIGKILL和19号信号SIGSTOP不能被忽略和捕捉
3.函数接口:
1.signal
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
功能:
切换信号的处理方式
参数:
signum:信号的编号
handler:信号对应的处理方式
SIG_IGN 忽略信号
SIG_DFL 缺省信号处理方式
自定义的函数的函数名(指向函数的指针)
返回值:
成功返回之前注册的信号的处理方式
失败返回SIG_ERR
4.定时器:
alarm
unsigned int alarm(unsigned int seconds);
功能:
间隔seconds秒后给进程发送SIGALRM信号
参数:
seconds:间隔秒数
返回值:
成功返回上次定时剩余的秒数
失败返回-1
5.kill
int kill(pid_t pid, int sig);
功能:
向进程发送信号
参数:
pid:进程id
sig:信号值
返回值:
成功返回0
失败返回-1