Linux6-进程消亡、

news/2025/2/22 22:51:17

一、进程补充

函数指针取别名

typedef void (*tmp) vdoid;//将所有的void (*)void数据类型取别名为tmp

1.进程消亡:

        进程退出:

                1.1主函数调 return 0;

                1.2调 exit(库函数)\_exit\Exit(系统调用)(不会刷新缓冲区、因为文件io无缓冲区)

 void exit(int status)(会刷新缓冲区)
功能:退出一个进程

 参数:

  EXIT_SUCCESS  0一切成功退出   

   EXIT_FAILURE     1发生失败退出

                1.3被动结束,信号结束

        进程回收:

                 僵尸进程:进程已结束,但其资源空间未被其父进程回收

                 如何避免僵尸进程:

                1.子进程结束,其父进程使用wait/waitpid回收资源空间

                

pid_t wait( int *wstatus);
功能:回收子进程空间和退出状态(会有阻塞的效果,等待子进程结束)
参数:需要保存的回收的子进程状态值的地址
返回值:成功返回子进程的id号
pid_t waitpid( pid_ pid,int *wstatus,int options);
功能:回收子进程(会有阻塞的效果,等待子进程结束)和wait相似,比wait灵活

参数:pid

<-1回收指定进程组内的任意子进程(-100.等待GID=100的进程组中的任意子进程)

-1回收任意子进程,组内外
0回收和当前调用watpid一个组的所有子进程,组内

>0回收指定D的子进程

        status:

子进程退出时候的状态,如果不关注退出状态用NULL:

        options:

0表示回收过程会阻塞等待WNOHANG表示非阻塞模式回收资源。

返回值:成功返回接收资源的子进程pid
            失败 -1
设定为非阻塞且没有回收到子进程返回0

*使用非阻塞方式回收,需要加轮询方式可以让父进程执行自己的任务。

*wait主要做的资源回收就是回收内核中的PCB块

                2.让子进程成为一个孤儿进程,让孤儿进程会被系统中的进程收养,由系统进程负责回收。

                 孤儿进程:父进程先消亡,由该父进程产生的子进程变为孤儿进程被系统进程收养。

                什么叫守护进程?

 2.exec函数族( 不会创建一个新的进程,因为excel会将外部代码替换在当前文件中):

  • int execl(const char *path, const char *arg,.../*(char *)NULL */);        l:list:列表

              外部程序的路径如何执行这个代码……从NULL前结束    

例子:excel("hello","./hello",NULL);

           excel("/bin/ls","ls","-l",NULL);*whereis 可查看指令的目录

                      绝对路径


  • int execlp(const char *file, const char *arg, .../*(char *)NULL */);          p:PATH:环境变量中的路径  不可执行自己创建的文件 *env 可查看环境变量

例子: exclp("ls","ls","-l",NULL);*whereis 可查看指令的目录


  • int execv(const char *path, char *const argv[ ]);                                    v:vextor:容器

例子:char *s[]={"./app",NULL};

           execv("./app",s);

           char s[]={"ls","-l",NULL};

           execv("/bin/ls",s);


  • int execvp(const char *file, char *const argv[ ]):                                     p:PATH:环境变量中的路径

例子:char s[]={"ls","-l","-a",NULL};

           execvp("ls",s);*whereis 可查看指令的目录

                        任意文件,环境变量PATH保存了所有路径


  • int system(const char *commend)

例子:system("./a.out");

           system("ls -l -a");

  •  char *strtok(char *str,const char *delim );

功能:用来字符串的分割,会修改原字符串

例子:char s1[]={"ls -l -a"};

           char *p=strtok(s1," ");//p=ls

           char *p=strtok(NULL," ");//p=-l

           char *p=strtok(NULL," ");//p=-a

           char *p=strtok(NULL," ");//p=NULL


http://www.niftyadmin.cn/n/5862820.html

相关文章

CentOS 7配置YOLOv8环境指南:无显卡版教程 - 幽络源

看本篇教程前请确保Centos7系统已安装配置Python3环境&#xff0c;参考幽络源上一篇文章>CentOS 7安装Python3环境详细指南&#xff1a;从源码编译到PIP配置 步骤1&#xff1a;建立python虚拟环境项目 在home目录下执行如下命令新建虚拟环境python项目 python3 -m venv y…

Java数据结构第十二期:走进二叉树的奇妙世界(一)

专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 目录 一、树型结构 1.1. 树的定义 1.2. 树的基本概念 1.3. 树的表示形式 二、二叉树 2.1. 概念 2.2. 两种特殊的二叉树 2.3. 二叉树的性质 2.4. 二叉树的存储 三、二叉树的基本操作 一、树型结构 1.…

Golang中如何正确close channel

在 Go 语言中&#xff0c;close 操作用于关闭一个 channel&#xff0c;通常是由发送数据的方&#xff08;即发送者&#xff09;来完成。关闭 channel 表明不会再有更多的数据会被发送到该 channel&#xff0c;但是已发送的数据仍然可以被接收。关闭 channel 是 Go 中一种同步机…

开源免费文档翻译工具 可支持pdf、word、excel、ppt

项目介绍 今天给大家推荐一个开源的、超实用的免费文档翻译工具&#xff08;DeeplxFile&#xff09;&#xff0c;相信很多人都有需要翻译文档的时刻&#xff0c;这款工具就能轻松解决你的需求。 它支持多种文档格式翻译&#xff0c;包括 Word、PDF、PPT、Excel &#xff0c;使…

STL介绍1:vector、pair、string、queue、map

一、vector&#xff1a;变长数组、倍增思想 1.常用函数 size()&#xff1a;返回元素个数 empty()&#xff1a;返回是否为空 clear()&#xff1a;清空 front() / bcak() push_back() / pop_back()&#xff1a;尾部插入和删除 2.存储方式 #include<iostream> #incl…

内容中台架构下智能推荐系统的算法优化与分发策略

内容概要 在数字化内容生态中&#xff0c;智能推荐系统作为内容中台的核心引擎&#xff0c;承担着用户需求与内容资源精准匹配的关键任务。其算法架构的优化路径围绕动态特征建模与多模态数据融合展开&#xff0c;通过深度强化学习技术实现用户行为特征的实时捕捉与动态更新&a…

ES6 Generator生成器——同步异步生成器

Generator函数的详解。看来他们对JavaScript中的生成器很感兴趣&#xff0c;可能是在学习异步编程或者迭代器的相关部分。我需要先回顾一下Generator的基础知识&#xff0c;确保覆盖基本概念、用法、特性和常见应用场景。 首先&#xff0c;用户可能已经了解AsyncGenerator&…

QT SQL框架及QSqlDatabase类

1、概述 本文对QT的SQL模块进行了整理&#xff0c;可供新同事参考&#xff0c;Qt SQL模块提供数据库编程的支持&#xff0c;MySQL、Oracle、MS SQL Server、SQlite等&#xff0c;作者未来的工作的其中一个接口将是QT接口。 Qt SQL模块包含多个类&#xff0c;实现数据库的连接…