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

餐饮公司最好的网站建设wordpress 字体 插件下载

餐饮公司最好的网站建设,wordpress 字体 插件下载,iis 网站建设中,建设公司网站模板下载1.进程退出 子进程退出时&#xff1a;父进程帮助子进程回收内核区的资源 exit.c /*#include <stdlib.h>void exit(int status);#include <unistd.h>void _exit(int status);status参数&#xff1a;是进程退出时的一个状态信息。父进程回收子进程资源的时候可以获取…

1.进程退出

在这里插入图片描述

子进程退出时:父进程帮助子进程回收内核区的资源

exit.c

/*#include <stdlib.h>void exit(int status);#include <unistd.h>void _exit(int status);status参数:是进程退出时的一个状态信息。父进程回收子进程资源的时候可以获取到。
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main() {printf("hello\n");printf("world");// exit(0);_exit(0);return 0;
}

输出结果

在这里插入图片描述
刷新缓冲区

\n和fflush(stdout)在这里起的作用是刷新缓冲区
缓冲区刷新的条件:
1.进程结束。
2.遇到\n。
3.缓冲区满。
4.手动刷新缓冲区fflush(stdout)。
5.调用exit(0);但是还可以调用_exit(0),不刷新缓冲区。

2.孤儿进程

在这里插入图片描述

orphan.c

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>int main() {// 创建子进程pid_t pid = fork();// 判断是父进程还是子进程if(pid > 0) {printf("i am parent process, pid : %d, ppid : %d\n", getpid(), getppid());} else if(pid == 0) {// 让父进程先die(运行完)sleep(1);// 当前是子进程printf("i am child process, pid : %d, ppid : %d\n", getpid(),getppid());}// for循环for(int i = 0; i < 3; i++) {printf("i : %d , pid : %d\n", i , getpid());}return 0;
}

输出结果

子进程的父进程id变成init = 1
在这里插入图片描述

为什么输出时终端会在父进程结束之后在前台出现一下?

因为他不知道还有个孤儿进程没执行完毕

3.僵尸进程

在这里插入图片描述

zombie.c

子进程die,父进程没有去回收子进程的资源

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>int main() {// 创建子进程pid_t pid = fork();// 判断是父进程还是子进程if(pid > 0) {while(1) {printf("i am parent process, pid : %d, ppid : %d\n", getpid(), getppid());sleep(1);}} else if(pid == 0) {// 当前是子进程printf("i am child process, pid : %d, ppid : %d\n", getpid(),getppid());}// for循环for(int i = 0; i < 3; i++) {printf("i : %d , pid : %d\n", i , getpid());}return 0;
}

输出结果

子进程的状态已经变成zombie
在这里插入图片描述

如何解决僵尸进程

杀死父进程,让子进程被init进程托管

4.wait函数

如何在父进程中回收子进程的资源
在这里插入图片描述

wait函数是阻塞状态的:父进程中调用了wait函数,如果子进程没有结束,父进程一直处于阻塞
直到子进程结束了,父进程就不阻塞了

wait.c

/*#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *wstatus);功能:等待任意一个子进程结束,如果任意一个子进程结束了,此函数会回收子进程的资源。参数:int *wstatus进程退出时的状态信息,传入的是一个int类型的地址,传出参数。返回值:- 成功:返回被回收的子进程的id- 失败:-1 (所有的子进程都结束,调用函数失败)调用wait函数的进程会被挂起(阻塞),直到它的一个子进程退出或者收到一个不能被忽略的信号时才被唤醒(相当于继续往下执行)如果没有子进程了,函数立刻返回,返回-1;如果子进程都已经结束了,也会立即返回,返回-1.*/
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>int main() {// 有一个父进程,创建5个子进程(兄弟)pid_t pid;// 创建5个子进程// 需要注意不能直接for循环5个fork,因为fork产生新的子进程之后,会在新的子进程里继续fork// 产生孙子进程,进而呈指数级别新增进程// 所以需要判断pid = 0时breakfor(int i = 0; i < 5; i++) {pid = fork();if(pid == 0) {break;}}if(pid > 0) {// 父进程while(1) {printf("parent, pid = %d\n", getpid());// int ret = wait(NULL);int st;//传出参数// 返回值是被回收的子进程的idint ret = wait(&st);if(ret == -1) {break;}if(WIFEXITED(st)) {// 是不是正常退出printf("退出的状态码:%d\n", WEXITSTATUS(st));}if(WIFSIGNALED(st)) {// 是不是异常终止printf("被哪个信号干掉了:%d\n", WTERMSIG(st));}printf("child die, pid = %d\n", ret);sleep(1);}} else if (pid == 0){// 子进程while(1) {printf("child, pid = %d\n",getpid());    sleep(1);       }exit(0);}return 0; // exit(0)
}

退出信息相关宏函数

在这里插入图片描述

5.waitpid.c

waitpid非阻塞的好处:父进程不用一直阻塞,可以继续正常做一些业务逻辑,等到合适的时机回来检查一下是否有die的子进程需要回收

/*#include <sys/types.h>#include <sys/wait.h>pid_t waitpid(pid_t pid, int *wstatus, int options);功能:回收指定进程号的子进程,可以设置是否阻塞。参数:- pid:pid > 0 : 某个子进程的pidpid = 0 : 回收当前进程组的所有子进程    pid = -1 : 回收所有的子进程,相当于 wait()  (最常用)pid < -1 : 某个进程组的组id的绝对值,回收指定进程组中的子进程(比如-2,进程组号为2的进程组的子进程)- options:设置阻塞或者非阻塞0 : 阻塞WNOHANG : 非阻塞- 返回值:> 0 : 返回子进程的id= 0 : options=WNOHANG, 表示还有子进程活着= -1 :错误,或者没有子进程了
*/
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>int main() {// 有一个父进程,创建5个子进程(兄弟)pid_t pid;// 创建5个子进程for(int i = 0; i < 5; i++) {pid = fork();if(pid == 0) {break;}}if(pid > 0) {// 父进程while(1) {printf("parent, pid = %d\n", getpid());sleep(1);int st;// int ret = waitpid(-1, &st, 0); // 和wait()一样int ret = waitpid(-1, &st, WNOHANG);if(ret == -1) {break;} else if(ret == 0) {// 说明还有子进程存在continue;} else if(ret > 0) {if(WIFEXITED(st)) {// 是不是正常退出printf("退出的状态码:%d\n", WEXITSTATUS(st));}if(WIFSIGNALED(st)) {// 是不是异常终止printf("被哪个信号干掉了:%d\n", WTERMSIG(st));}printf("child die, pid = %d\n", ret);}}} else if (pid == 0){// 子进程// 这里是一个死循环,具体通过终端ctrl c杀死子进程的while(1) {printf("child, pid = %d\n",getpid());    sleep(1);       }exit(0);}return 0; 
}

进程组

在这里插入图片描述

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

相关文章:

  • 多语言建站系统企业电话
  • 公司网站制作哪家公司好手机网站建站费用
  • php整站最新版本下载什么网站免费做简历
  • 昆明专业建站查询个人信息最全的网站
  • 怎么建设一个自己微信网站用仿站工具做网站
  • 二级域名解析网站东莞同城招聘
  • 阳泉 网站建设合作网站推广软件免费下载
  • 如何做公司培训网站网站商城app建设方案
  • 我要浏览国外网站怎么做公司logo是什么意思
  • 搜狗网站录入可以下载的网站模板
  • 芜湖网站建设价格山西响应式网站平台
  • 百度网站是怎么做的怎样从用户体现提高网站的搜索引擎信任度
  • 一个阿里云怎么做两个网站吗石家庄做网站建设的公司排名
  • 网站开发人员职业分析win7 iis网站设置
  • 毕节建设厅网站数字营销推广平台
  • 阿里云可以做电影网站深圳建工集团股份有限公司待遇
  • 网站流量外流南阳做网站 汉狮公司
  • 网站管理员密码忘记了搭建好网站如何使用
  • 专业集团门户网站建设企业安徽制作网站专业公司
  • 网站制作的部分滨州淘宝网站建设
  • 网站模型怎么做部门网站建设和维护
  • 3800给做网站抖音开放平台官网入口
  • 哪里找做网站的客户网站建设必须要服务器吗
  • 怎么做淘宝客的网站怎样用别人的网站做修改病句
  • 网站备案要先怎么做呼和浩特建设厅网站
  • 泉州网站关键词推广中企动力邮箱登录首页
  • 苏州行业网站建设费用网站开发难题
  • 网站设计加油站二手交易网站开发技术路线
  • 网站备案产品信息错误温州网页制作招聘
  • 用 net做网站删除wordpress网页无用