首页 > 代码库 > 一、进程与信号之中断系统调用
一、进程与信号之中断系统调用
进程“慢”系统调用,如果发生了信号,内核会重启系统调用
慢系统调用:
可能会永远阻塞的系统调用
从终端设备,管道,或者网络设备上的文件读取
向上述文件写入
某些设备上的文件打开
pause和wait系统调用
一些设备ioctl操作
一些进程间通信函数
系统中断调用信号处理函数重新执行
#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <signal.h>void set_signal(int signo){ printf("set signal %d\n",signo);}int main(){ char buffer[512]; ssize_t size; if(signal(SIGTSTP,set_signal)==SIG_ERR) { printf("signal error\n"); } printf("main start reading a file\n"); size=read(STDIN_FILENO,buffer,512); if(size <0) { printf("reading error\n"); } printf("reading finished\n"); if(write(STDIN_FILENO,buffer,size)!=size) { printf("write error\n"); } return 0;}
用户函数调用,信号处理函数未重新执行
#include <signal.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>void set_signal(int signo){ printf("signal call %d\n",signo);}void user_call(){ printf("user run start\n"); sleep(10); printf("user run end\n");}int main(){ if(signal(SIGTSTP,set_signal)==SIG_ERR) { printf("set signal error"); } printf("main start\n"); user_call(); printf("mian end\n");}
不可重入函数:
使用了全局变量或者静态变量
可重入函数:
全部内部变量
一、进程与信号之中断系统调用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。