当前位置: 首页 > news >正文

网站项目开发案国外免费logo设计网站

网站项目开发案,国外免费logo设计网站,做网站用的国外节点服务器,公司网站制作与推广上篇文章#xff1a;Linux操作系统5-进程信号3#xff08;信号的捕捉流程#xff0c;信号集#xff0c;sigaction#xff09;-CSDN博客 本篇Gitee仓库#xff1a;myLerningCode/l26 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 目录 一. 可重入… 上篇文章Linux操作系统5-进程信号3信号的捕捉流程信号集sigaction-CSDN博客 本篇Gitee仓库myLerningCode/l26 · 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 目录 一. 可重入函数 二. volatile关键字 2.1 volatile关键字作用 2.2 中断程序下volatile关键字作用 三. SIGCHILD 信号 3.1 使用SIGCHLID处理进程退出 3.2 SIG_IGN清理僵尸进程 一. 可重入函数 我们一般将 main函数执行流和 信号捕捉执行流是两个执行流 有一个函数fun 如果在main执行流和信号捕捉执行流中这个函数被重复进入如果出现了问题  -  则这个函数是不可重入函数。 如果在main执行流和信号捕捉执行流中这个函数被重复进入如果没有出现问题  -  则这个函数是可重入函数。         不可重入函数如果在多个执行流中执行的话可能会导致数据不安全问题 是否可重入是一个中性的形容词。 一般来说调用了malloc/free/new/delete等的函数是不可重入的 。调用了 I/O操作的函数也是不可重入的。 二. volatile关键字 2.1 volatile关键字作用 vlolatile关键字的作用是保证某变量的内存可见性。 被vlolatile修饰的变量系统总是从内存中读取这个数据。此时编译器不会对这个变量过度优化比如将其写入到某一个寄存器中从寄存器读取数据。 2.2 中断程序下volatile关键字作用 下面这段代码可能会出现编译器过度优化而导致的错误。 #include stdio.h #include unistd.h #include signal.hint quit 0;void handler(int signo) {printf(捕捉到[%d]信号\n, signo);printf(quit: %d, quit);quit 1;printf(- %d\n, quit); }int main() {signal(2, handler);while (!quit);printf(由于信号捕捉, quit为1 正常退出\n);return 0; } 该代码收到2号信号就会更改quit然后进程就能正常结束 不优化情况下编译运行 可以看到程序没有任何问题。 现在增加编译器的优化, 修改makefile 增加 -O3 可以看到ctrl c 之后进程收到2号信号将quit改为1但是不会退出 。 为什么不会退出呢数据会保存在内存或者寄存器 不优化执行handler之后将quit写回内存main函数退出 优化quit在main函数执行流没有被修改编译器之后将其保存在寄存器中且之后一直从寄存器中读取数据。执行handler之后将物理内存中的quit改为1但是寄存器中的数据没有修改所以进程不会退出。         这样就导致了代码无问题程序有问题 如果对quit使用volatile关键字修饰此时会保证其内存可见性每次读取数据的时候都去内存中读取数据 。之后就不会出问题了 #include stdio.h #include unistd.h #include signal.hvolatile int quit 0;void handler(int signo) {printf(捕捉到[%d]信号\n, signo);printf(quit: %d, quit);quit 1;printf(- %d\n, quit); }int main() {signal(2, handler);while (!quit);printf(由于信号捕捉, quit为1 正常退出\n);return 0; } 运行结果如下  三. SIGCHILD 信号 3.1 使用SIGCHLID处理进程退出 SIGCHLID17号这个信号是子进程退出的时候会向父进程发送这个信号。 我们在进程控制时候提到可以使用wait或者waitpid来获取子进程退出的信息。处理僵尸进程子进程退出父进程太忙无时间处理子进程退出问题。         我们可以采用阻塞或者非阻塞的方式来等待子进程退出。采用阻塞的话父进程就不能进行自己的工作。采用非阻塞的方式的话进行自己工作的时候询问也会降低效率。 进程等待可看这篇文章Linux操作系统2-进程控制2(进程等待waitpid系统调用阻塞与非阻塞等待)_wait系统调用-CSDN博客 我们使用子进程退出父进程接收17号信号的特点。17号信号的默认行为是忽略如果我们自定义17号信号的行为在handler中进行等待子进程退出这样就能让父进程去执行自己的代码而不用去浪费时间关心子进程退出了。 即子进程退出向父进程发送SIGCHILD信号父进程接收信号后调用wait/waitpid清理子进程退出信息。清理僵尸进程。 测试代码如下 如果有多个子进程同时退出或者部分子进程退出需要循环等待它们并且只要没等待成功就立即结束信号捕捉方法。 代码如下 #include iostream#include unistd.h #include wait.h #include signal.h #include sys/types.hvoid handler(int signo) {// 处理子进程退出信息std::cout 我是父进程 pid为: getpid() 收到信号: signo std::endl;while (1){int status 0;pid_t sid waitpid(-1, status, 0);printf(子进程退出码[%d], 子进程退出信号[%d]\n, ((status 8) 0xff), (status 0x7f));if (sid 0)break;} }int main() {// 1.自定义SIGCHILD行为signal(SIGCHLD, handler);// 2.创建子进程pid_t id fork();if (id 0){// 子进程int cnt 5;while (cnt--){std::cout 我是子进程 pid为: getpid() std::endl;sleep(1);}exit(2);}// 父进程int cnt 0;while (1){std::cout 我是父进程 pid为: getpid() 次数为: cnt std::endl;sleep(1);}return 0; } 3.2 SIG_IGN清理僵尸进程 使用SIG_IGN清理僵尸是由于uinx的历史原因。在linux中保留了这种方式。 我们使用signal或者sigaction将SIGCHILD信号的捕捉方法设置为SIG_IGN即可自动帮助我们清理僵尸进程。 测试代码如下 #include iostream#include unistd.h #include wait.h #include signal.h #include sys/types.hint main() {// 1.自定义SIGCHILD行为并用SIG_IGN清理僵尸进程signal(SIGCHLD, SIG_IGN);// 2.创建子进程pid_t id fork();if (id 0){// 子进程int cnt 5;while (cnt--){std::cout 我是子进程 pid为: getpid() std::endl;sleep(1);}exit(2);}// 父进程不等待子进程int cnt 0;while (1){sleep(1);}return 0; } 测试僵尸进程有没有被处理。 如果我们注释掉 signal(SIGCHLD, SIG_IGN); 这条代码。 运行结果如下 子进程没有受到处理变为僵尸进程导致内存泄漏
http://www.hkea.cn/news/14571478/

相关文章:

  • wordpress网站如何播放视频如何查询网站是不是asp做的
  • 惠州网站建设学校建设部网站燃气管理部门
  • 安微省建设厅田网站wordpress首页文章带图
  • 建设行业的门户网站常州建设局下属网站
  • 媒体135网站湖北省建设银行网站6
  • 南山网站建设哪家好做贷款网站犯法
  • 一个公司备案两个网站网址大全2345色综合导航
  • 做网站来钱快微信营销平台
  • 东莞关键词优化代理德州网站优化
  • 如何做棋牌网站有没有做英语题的网站
  • 安徽网站建设外贸丽水专业网站建设价格
  • 国内男女直接做的视频网站wordpress和apache
  • 免费企业信息查询网站wordpress阅读主题
  • 要怎么做网站安顺做网站的公司
  • 房建设计图网站如何为wordpress加评论
  • 做母婴的网站有哪些成都品牌设计
  • 综述题建设网站需要几个步骤做app 的模板下载网站有哪些内容
  • 怎么在企业站建立网站吗建设网站 注册与登陆
  • php网站开发遇到的问题商贸有限公司怎么样注册
  • 做网站设计哪里有信誉好的做pc端网站
  • 怎样做自己的摄影网站成都设计院招聘
  • 佛山市网站建设 乾图信息科技网上如何建网站卖量具
  • html的制作网站的优点代做财务报表分析网站
  • .net网站费用wordpress采集发布
  • windows2008 iis 网站配置合肥网站到首页排名
  • 友情链接网站大全提供网站制作公司电话
  • 搜索引擎大全网站企业网站备案快吗
  • 静态网站提交表单怎么做竞价托管运营哪家好
  • 建筑必看六个网站建筑网官方网站查询
  • 网站建设脚本语言有哪些图片素材网站模板