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

PHP视频类网站应该怎么做动态视频网站开发

PHP视频类网站应该怎么做,动态视频网站开发,网站呼叫中心 建设工期,织梦网站名称一、僵尸进程 何为僵尸进程? 在 Unix/Linux 系统中,正常情况下,子进程是通过父进程创建的,且两者的运行是相互独立的,父进程永远无法预测子进程到底什么时候结束。当一个进程调用 exit 命令结束自己的生命时&#xff…




在这里插入图片描述




一、僵尸进程


何为僵尸进程?


        在 Unix/Linux 系统中,正常情况下,子进程是通过父进程创建的,且两者的运行是相互独立的,父进程永远无法预测子进程到底什么时候结束。当一个进程调用 exit 命令结束自己的生命时,其实它并没有真正的被销毁,操作系统内核只是释放了该进程的所有资源,包括打开的文件、占用的内存等(比如malloc占用内存不释放,也会在此时释放),但是留下一个数据结构(只保留 struct task_struct 一个空壳子),这个结构保留了一定的信息(包括进程号 the process ID,退出状态,运行时间….),这些信息直到父进程通过 wait() / waitpid() 来取时才释放。这样设计的目的主要是保证父进程能够获取到子进程结束时的状态信息(父进程回收僵尸进程的时候可以根据 退出码 确定子进程的退出原因)。


而只剩下一个保留着退出状态等信息的数据结构的进程,即为僵尸进程



僵尸进程的危害


占用进程号:系统所能使用的进程号是有限的,如果大量的产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程僵尸进程会占用系统的进程表条目,如果系统中有大量僵尸进程存在而不被清理,可能会导致系统不能创建新的进程。这是因为进程ID(PID)是有限的,如果大部分都被僵尸进程占用,那么就没有足够的PID分配给新创建的进程。

有人说僵尸进程会占用内存:实际上,僵尸进程不占有任何内存空间,其本身并不会直接导致内存泄漏。内存泄漏更多是程序设计的问题,而不是操作系统层面的问题。僵尸进程最大的危害是占用进程号,导致系统无法产生新进程。



僵尸进程的的创建


子进程在 exit() 之后,父进程没有来得及处理,这时用 ps 命令就能看到子进程的状态是“Z”,即为僵尸状态

创造一个僵尸进程思路:保证父进程不死,子进程创建后使用 exit(0) 退出

这条 71780 号进程即为状态 Z 的僵尸进程(defunct 意思是已失效)

在这里插入图片描述


#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>int main(){printf("I am 父进程, pid : %d\n", getpid());pid_t id = fork();// 父进程:死循环维持生命if(id > 0){printf("这是新建的子进程: %d\n", id);while(1){printf("I am 父进程, pid : %d\n", getpid());sleep(1);};}// 子进程: 创建后退出,形成僵尸进程else if(id == 0){exit(0);		}return 0;
}


二、孤儿进程


何为孤儿进程?


孤儿进程:当某个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程并不是无父无母的 “野孩子”,而是会被系统默认的 init 进程所收养。(或者是现代 Linux 系统中的 systemd 进程,在早期的 Unix 系统中通常是 PID = 1init 进程)


        当一个进程成为孤儿进程后,它的直接父进程变成了 init systemd ,这样可以确保每个进程都有一个父进程。 init systemd 作为“养父”,不会像真正的父进程那样去管理和控制孤儿进程的行为,但它会负责清理孤儿进程的退出状态。也就是说,当孤儿进程最终终止时, init systemd 会接收到孤儿进程的退出通知,并更新系统的进程表。即 “养父” 会默认管理孤儿进程的退出状态,会帮它回收,不会使其变成僵尸进程,因此孤儿进程并不会有什么危害。



三、如何杀掉僵尸进程?


注意:僵尸进程不能被系统的 kill -9 信号杀死(SIGKILL只能发送给仍在运行的进程) (因为僵尸进程已经死了,是死掉的进程,当然也不能响应系统的信号)

1、被父进程回收

通过 wait() /waitpid() 才释放

2、可以杀掉它的父进程

        ​父进程被杀掉之后,僵尸进程会变成孤儿进程,孤儿进程会被系统的 1 号进程收留(即 Init 进程),1 号进程会检查该进程是不是僵尸进程,如果是的话则会将进程回收。


3、设置信号处理器

    父进程可以在创建子进程之前设置SIGCHLD信号的处理函数,当子进程结束时,操作系统会向父进程发送SIGCHLD信号。父进程可以在这个信号的处理函数中调用wait()waitpid()来清理僵尸进程。

#include <signal.h>
//...
void handle_child(int signum) {int status;waitpid(-1, &status, WNOHANG); // 非阻塞方式回收
}// 设置信号处理器
signal(SIGCHLD, handle_child);


http://www.yayakq.cn/news/469524/

相关文章:

  • 二手网站开发文档模板手机网站制作 费怎么做分录
  • 电子商务网站建设模式如何创造属于自己的软件
  • 企业网站seo从哪开始公司部门部长是什么级别
  • 网站换域名能换不黄骅贴吧房屋租赁信息
  • 网络平台指网站 建设项目所在地免费sem工具
  • 曲周手机网站建设网站建设维护是做什么会计科目
  • 网站备案容易通过吗怎么做网站流量赚钱吗
  • 2023年推广网站电子商务网站设计要求
  • 网站开发需要什么技能wordpress js特效
  • 淮海中路街道网站建设wordpress 插件 简码
  • 网站推广在线京东网站是刘强冬自己做的吗
  • 网站后台要怎么做大业推广网站
  • 网站建设存在的困难vs网站开发入门
  • 企业网站策划建设方案百度网页游戏大全免费
  • 沈阳网站建站公司推广员是做什么的
  • 深圳网站建设公司服务怎么做营销助手
  • 网站开发赚钱么建筑工程公司宣传册设计样本
  • 江苏省建设厅网站 杨洪海wordpress idp
  • 无锡网站建设方案服务网页版qq音乐
  • 成都微信网站建设多少钱公司起名字大全免费3个字
  • 网站建设需要懂什么软件wordpress和论坛整合
  • 做自己的网站logodw设计试图做网站
  • asp 网站打不开seo网站自动推广
  • 网站建设入门培训网页制作和设计实验报告
  • seo网站优化外包重庆全网推广
  • ui设计做兼职的网站有哪些手机4g建立网站
  • 个人建站做什么网站比较赚钱做公司网站要去哪里找人做
  • 大同网站建设天眼查企业入口免费
  • 北京网站推广排名外包登录到wordpress后台
  • 北方工业大学网站建设单一本地门户网站源码