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

文案转行做网站编辑系统优化软件哪个最好的

文案转行做网站编辑,系统优化软件哪个最好的,网上商城如何做起来,网站开发需要什么工具在上一节利用fork实现服务端与多个客户端建立连接中#xff0c;我们使用fork函数来实现服务端既可以accept新的客户端连接请求#xff0c;又可以接收已连接上的客户端发来的消息。但在Linux中#xff0c;在子进程终止后#xff0c;父进程需要处理该子进程的终止状态#x…在上一节利用fork实现服务端与多个客户端建立连接中我们使用fork函数来实现服务端既可以accept新的客户端连接请求又可以接收已连接上的客户端发来的消息。但在Linux中在子进程终止后父进程需要处理该子进程的终止状态否则子进程将成为僵尸进程本节就来探讨一下僵尸进程的处理。 文章目录 1 什么是僵尸进程2 回收僵尸进程2.1 SIG_IGN忽略2.2 wait和waitpid2.2.1 wait2.2.1 waitpid 1 什么是僵尸进程 僵尸进程(Zombie Process)是操作系统中的一种特殊进程状态它通常出现在一个子进程终止但其父进程尚未能够处理该子进程的终止状态。 特点 僵尸进程不执行任何代码它们仅仅是一个进程描述符和一些状态信息如退出状态码占用少量系统资源。如果大量的僵尸进程积累可能会导致系统资源耗尽。 解决方法 当子进程终止时父进程可以使用wait()或waitpid()等系统调用来等待子进程的退出状态信息从而释放子进程的资源同时告知操作系统可以回收子进程的进程表项另一种方法是使用信号处理程序在父进程中注册SIGCHLD信号处理程序来处理子进程的退出状态 在上一篇文章的例子中如果在客户端的进程终止后服务端没有回收子进程的话将产生一个僵尸进程。 我们可以使用top指令来看系统中现在有多少个僵尸进程 我们还可以使用ps -aux |grep Z来查看具体的僵尸进程的信息 图中STAT(状态)为Z(Zombie)的即为僵尸进程。 2 回收僵尸进程 2.1 SIG_IGN忽略 最简单的我们可以使用SIG_IGN来忽略SIGCHLD信号这样内核会在子进程终止时立即将其资源释放而不需要父进程调用wait或waitpid来获取子进程的终止状态以释放资源。 可以看到此时是没有产生僵尸进程的 2.2 wait和waitpid 使用signal(SIGCHLD, SIG_IGN);的方式处理僵尸进程有一些局限性和潜在的问题 父进程无法得知子进程是正常退出还是异常终止以及子进程的退出状态是什么。父进程无法正确处理每个子进程的终止状态。 如果需要掌握子进程退出的情况建议注册信号回调函数然后使用wait或waitpid来处理僵尸进程。 2.2.1 wait 如下图所示可以使用wait函数来回收子进程的资源。 运行程序创建一个客户端然后关闭再创建一个客户端然后再关闭结果如下 可以看到服务端正常地回收了资源此时使用top查看也是没有僵尸进程的。 但是在多个客户端同时关闭的情况下wait会产生问题 我们现在对客户端的代码做出如下修改 现在来看一下这10个套接字同时退出后会发生什么 可以看到我们注册的SIGCHLD回调函数只被触发了4次也就是说只有4个子进程的资源被回收了。此时用top查看僵尸进程的数量果然还有6个 实际上也好理解这些套接字在非常短的时间间隔内同时关闭对于Linux的内核来看应该是有一个进程专门用来处理这些信号在上一个信号还在处理的同时又来了多个信号那么下次OS只会响应一个信号而不会调用多次回调函数然后调用一次wait就回收一个子进程。 所以如果我们多次测试可以发现每次被回收的进程的数量都是不同的这和OS内部的任务调度有关但基本上不可能10个全部回收。 那我们是否可以在sigchld_handler中调用while循环无限地wait来解决这个问题呢 答案是否定的。因为 wait 是一个阻塞调用会导致信号处理函数阻塞而信号处理函数的处理应该尽量迅速。 2.2.1 waitpid 这时我们就可以使用waitpid函数 pid_t waitpid(pid_t pid, int *status, int options);其中第三个参数options的常用值如下(可以使用按位或运算符|组合多个选项) WNOHANG在没有终止的子进程时立即返回不阻塞。如果指定了这个选项waitpid 将立即返回不会等待子进程终止。WUNTRACED也等待已停止的子进程的状态。WCONTINUED也等待被停止的子进程被继续的状态。 所以我们只要在信号处理回调函数中使用waitpid(-1, status, WNOHANG)即可避免前面回收资源不完全的情况。 void sigchld_handler(int signo) {pid_t pid;int status;// 在信号处理函数中循环调用waitpid以获取所有子进程的终止状态,其中-1表示等待任意子进程while ((pid waitpid(-1, status, WNOHANG)) 0) {printf(Child process %d exited with status %d\n, pid, WEXITSTATUS(status));} }结果如下 这样就回收了所有的僵尸进程的资源。
http://www.pierceye.com/news/776940/

相关文章:

  • 网页制作与网站建设实战大全重庆房产信息网官网
  • 上海的网站建设公司app对接网站登录要怎么做
  • 江苏省备案网站现在什么网站做外贸的最好
  • 如何知道网站是否被k蓝山网站建设
  • 网站维护服务公司免费的网站推广渠道
  • 网站建设方案应该怎么写asp网站无法上传图片
  • 建个网站多少钱app企业关键词排名优化公司
  • 电子商务他们的代表网站代码网站怎么做的
  • 如何做网站卖东西长春互联网公司排名
  • 怎样拥有自己的网站制作网站的步骤和方法
  • 北京电子商务app网站建设大兴小程序源码如何部署到服务器
  • 设计找图网站网站用什么构建
  • 做微信的网站叫什么软件湛江网站建设制作维护
  • 做网站商城多少钱wordpress链接公众号
  • 数码产品销售网站建设策划书金融类网站模板
  • 档案网站建设视频网络软营销的案例
  • 德州市建设局质监站网站织梦做的网站打包在dw修改
  • 做那个男女的视频网站湖南响应式网站公司
  • 1个ip可以做几个网站电商网站建设阿里云
  • 网站做seo需要些什么wordpress虎嗅破解版
  • 网站开发按钮图片素材巩义自助建站优化
  • 石家庄网站建设接单常见的网络直接营销有哪些
  • 上海网站建设技术托管找合伙人做网站
  • 网站和自媒体都可以做东莞专业营销网站建设推广
  • 毕业设计网站怎么做校园网二手书交易网站建设
  • 网站运营托管协议凡科建设网站还用买服务器吗
  • 黑龙江省建设网官方网站erp系统软件免费版
  • 网站建设案例算命网站百度搜索站长平台网站
  • 手机wap网站模板 带后台thefox wordpress
  • 公司网站建设与设计制作游戏网站的设计方案