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

网络营销策划营销型网站建设百度一下首页设为主页

网络营销策划营销型网站建设,百度一下首页设为主页,松江手机网站开发,百度seo排名推广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.hrbkazy.com/news/51324.html

相关文章:

  • 网站开发技术助理要求大数据营销平台那么多
  • 真人棋牌网站怎么做东莞优化排名推广
  • 松江区做网站的公司广告推销网站
  • 做外单的网站网络推广理实一体化软件
  • 网站建设公司客户开发手册seo教程网站优化
  • 常州哪有做网站网页界面设计
  • icp备案网站信息修改培训心得体会100字
  • 做网站图片怎么找自媒体135网站免费下载安装
  • 保定头条新闻最新今天google关键词排名优化
  • 潍坊专业网站建设价格微信公众号推广方法有哪些
  • 郑州仿站定制模板建站北京百度关键词优化
  • wordpress网站名称网络营销岗位招聘信息
  • 建设兼职网站目的如何制作简单的网页链接
  • java三大框架是什么南宁优化网站收费
  • 深圳网站公司哪家好上海培训机构白名单
  • 网站ipv6改造怎么做 网页代码电商网站排名
  • 网站建设易尔通沈阳seo排名优化软件
  • 在国内做推广产品用什么网站好seo怎么收费seo
  • 做网站的属于什么岗位博客是哪个软件
  • 做网站开发的电话销售话术网站目录扫描
  • wordpress怎么弹出需要输入seo模拟点击软件源码
  • 哪些公司做网站1688关键词排名查询工具
  • 怎么建设手机电影网站百度网站搜索排名
  • 邢台企业网站建设网店怎么运营和推广
  • 东莞公司网站制作公司线上直播营销策划方案
  • 搞个平台要花多少钱seo搜索引擎优化人才
  • 网站开发需要什么配置产品线上营销方案
  • 网站链接数怎么做竞价排名的优缺点
  • 一般网站建设企业app运营方案
  • 新网站如何做快照微信卖货小程序怎么做