LINUX学习笔记13——进程间通信2信号
2547 点击·0 回帖
![]() | ![]() | |
![]() | a) 产生:按键,硬件异常,kill函数发送信号 b) 常见信号: 1. SIGHUP:结束信号 2. SIGINT:中断信号ctrl+c 3. SIGKILL:结束接收信号的进程 4. SIGTERM:KILL命令发出的信号 5. SIGCHLD:标志子进程停止或结束的信号 6. SIGSTOP:停止信号 c) 信号处理: 1. 忽略此信号:除了SIGKILL, SIGSTOP 2. 执行用户希望的动作: 3. 执行系统默认的动作: d) 发送信号: 1. Kill:可以给自己发,也可以给别人发信号 a) Int kill(pid_t pid, int signo); b) #include<sys/types.h> #include<signal.h> c) Pid: 1. >0:将信号发给ID为pid的进程 1. ==0:发给同组的进程 2. <0:发给其他组ID等于pid绝对值的进程 3. ==-1发给所有进程 d) 注意:在程序中使用以上函数,在程序外可以使用kill指令发送信号 1. 例:Kill –s SIGINT pid 2. 查看进程号:ps aux 2. Raise:只能给自己发 a) Int raise(int signo) b) #include<sys/types.h> c) #include<signal.h> 3. alarm:设定时间,到时产生SIGALARM信号,不捕捉,默认终止 a) unsigned int alarm(unsigned int seconds) 1. #include<unistd.h> 4. Pause:进程挂起直到捕捉到一个信号,类似于wait(子进程退出) a) Int pause(void) 1. #include<unistd.h> e) 信号处理函数: 1. Sighandler_t signal(int signo, void(*func)(int)) a) Func可能值: 1. SIG_IGN:忽略此信号 2. SIG_DFL:按系统默认方式处理 3. 信号处理函数名:使用该函数处理,func的参数是整形 b) #include<signal.h> c) 例:signal(SIGINT, my_func); 1. 为SIGINT信号注册信号处理函数。 d) 注意:注册函数后,并不是马上执行该函数,而是等待信号来时再执行该函数。因此需要关注信号注册函数的位置,在该位置以后才能捕捉该信号。 | |
![]() | ![]() |