Linux进程控制浅析


学习linux有一个月了,学校也开了操作系统的课,最直观的感受是终于知道怎么在linux全黑的操作框里写一个程序并且执行,在学习之前有过觉得操作界面太原始的抱怨,令人生畏一整个但是和化繁为简一个道理,所谓便捷的前端网页显示也是代码累加的结果,作为一个操作系统实在不用花里胡巧的附赘,以上献给linux曾经让我提不起兴趣的操作界面。
此后学习至此进程相关的基础知识已经接近尾声,操作系统作为软硬件资源分配的直属总管,程序里的逻辑由进程组合进一步完成实现,其重要性不言而喻,至此继续加油吧。


一、进程终止

进程终止的方法: 1、从main函数中return返回 2、exit函数 void exit(int status); _exit函数 void _exit(int status); 两者区别:是否刷新缓冲区 查看进程退出 echo $? :获取退出函数参数值 ![在这里插入图片描述](https://img-blog.csdnimg.cn/cb3ac1fe9db64d8488e968b9a05b7c33.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAT2Rmb2d5,size_20,color_FFFFFF,t_70,g_se,x_16) 刷新缓冲区的几种方式 \n exit() main 函数return

二、进程等待

进程等待定义:父进程对子进程退出后产生的的资源进行回收,防止子进程资源没被回收产生僵尸进程
wait函数
pid_t wait(int *status);
在等待的过程中存在阻塞状态,例如,在wait函数中父进程一直在等待子进程退出,如果子进程一直不退出,wait发函数功能一直存在,在等待子进程退出,给出返回。

成功返回子进程的pid号,失败返回-1;
pstack[pid]查看进程调用堆栈信息
函数退出信号占用空间情况:
在这里插入图片描述

wait函数作用数据流程:
在这里插入图片描述
函数模板
pid_t waitpid(pid_t pid,int status,int options)
pid:
-1: 等待任意子进程
大于0:子进程的pid号
status:出参
option:
WNOHANG :非阻塞等待方式(子进程没有退出时搭配循环使父进程不再等待导致阻塞)
0:阻塞等待方式
非阻塞等待方式举例:
在这里插入图片描述

三、进程程序替换

原理: 将进程的代码段和数据段替换成新程序的数据段代码段

原理图:

在这里插入图片描述
进程替换的应用:
1、守护进程
当当前进程执行程序崩溃之后又立马调用一个新的进程执行程序,保证进程的进行,整体起到一个守护的作用,但是程序中原有的崩溃代码并没有被解决,问题依然存在。
bash命令行解释所有父进程的父进程,此时父进程并没有和bash命令行解释器一样,也是进程替换的现象。
进程替换的接口:
1.execl(const charpath,const chararg,…,NULL);
path:新程序所在路径+新程序的名称
arg:给新程序传递参数
替换成功之后是没有返回值的,失败的返回值小 于0。
2.execlp(const char*file,xonst char *arg,…)
file:新程序名称 (该程序要存在于环境变量中)
arg:给新程序传递参数
因此相较于上个接口这个接口的特点是可以自动搜索环境变量

/* 设置环境变量的命令
export PATH= P A T H : C p w d . . / 想 要 设 置 的 环 境 变 量 / e x p o r t P A T H = PATH:^C pwd ../想要设置的环境变量/ export PATH= PATH:Cpwd..//exportPATH=PATH:环境变量的地址
*/

3.int execle(const charpath,const chararg,…,char*const envp[]);
path:新程序所在路径+新程序的名称
arg:给新程序传递参数
envp[]:指针数组,环境变量数组,内存自定义的环境变量,最后一个元素是NULL

4.execv(const charpath,charconst argv[]);
path:新程序所在路径+新程序的名称
argv[]:指针数组

5.int execvp(const file,charconst argv[]);
v:带命令行参数 p:自动搜索环境变量

6.int execvpe(constfile,charconst argv[],char*const envp[]);
v:自定义变量是环境参数数组 e:需要自己组织环境变量
除了第六个函数是系统调用函数别的都是库函数,在自己内部加上变量去调用exexvpe函数
在这里插入图片描述

ps:
const char lp 不能修改指针指向地址的内容
char
const lp 不能修改指针
const char*const lp 两者都不能修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值