linux——08进程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、进程的基本概念?

1.进程与程序的区别

	程序:存放在外存一段代码集合
	进行是一个动态执行的过程:
	包括进程的创建、调度和消亡

二、创建进程

1.进程的创建

	开辟 0 - 4G虚拟内存空间 其中内核1G,栈的空间为8兆
	系统数据段:
	堆栈
	数据段:
	字符串常量区
	未初始化全局变量或者静态变量
	初始化全局变量或者静态变量
	代码段:
	

在这里插入图片描述

2.进程的调度

	1.单核cpu情况下,微观并行,宏观串行
	运行进程信息都会放在一个结构体中,内核通过管理链表管理进程

在这里插入图片描述

2.进程调度算法

	1.先来先执行,后来后执行
	2.按高优先级调度算法
	3.时间片轮转调度算法
	4.多级队列反馈调度算法
	5.负载均衡算法

	时间片:cpu在执行任务的时候执行一段时间

3.进程的消亡

	孤儿进程:子进程没有结束,父进程先结束,子进程会成为孤儿进程,会被init进程收养
	僵尸进程:执行代码结束,空间没有被回收
	僵尸进程产生的原因:
	1.子进程没有结束,父进程没有回收子进程的空间,子进程就会成为僵尸进程 
	避免产生僵尸继承:
	1.父进程回收子进程空间
	2.父进程先结束

三、进程的状态

	就绪态/运行态:R  	程序在按时间片运行时,还没运行到
	可换醒等待态: S     由于缺少 某些资源,如read
	不可唤醒态:	  D 	系统启动时候
	暂停态:       T     程序内部设置停止
	僵尸态:		  Z      进程任务结束但是空间没有释放
	结束态:	      X		

在这里插入图片描述

四、进程相关的命令

	1.在后台执行任务
	./a.out &
	2.查看后台任务
	ps
	jobs
	3.将后台任务放到前台
	fg加任务编号
	4.杀死进程
		kill -9  进程PID
		killall -9 进程名
	5.根据cpu占用率擦查看当前进程任务
	top
	6.查看当前所有任务PID及父进程PID
	ps -ef
	7.查看所有进程的状态
	ps -aux
	8.以-10优先级执行进程
		sudo nice -n -10 进程名
	9.重新设置进程任务优先级
	sudo ranice -n -10 进程PID

五、函数接口

函数接口:
	1.fork
	同步:执行上有一定的时间关系
	异步:执行方面谁先谁后没有关系
	fork创建父子进程是异步关系,谁执行的哪没有关系。
	pid_t fork(void)
	功能:创建一个进程,将0-4G虚拟内存空间拷贝一份,父子代码段完全一样执行的功能不同。
	参数:无
	返回值:	 pid=-1fork失败
			 pid=0代表子进程
			 pid)0代表父进程
	2.exit(int status)
	功能:结束进程
	参数
	返回值
	3._exit
	功能:结束进程
	参数
	返回值
	两者的区别是
	(1) exit 是库函数 _exit是系统调用
	(2exit()清理注册函数,刷新缓存区,调用_ecit,exit是直接结束进程
	4.int atexit(void (*function)(void));
	功能:注册函数
	参数:函数指针,当事件不确定什么时候发生,函数参数为指针函数
	返回值:空
	5.pid_t wait(int *status)
	功能:回收子进程空间
	参数:status:存放子进程结束状态空间首地址
	返回值:
		成功返回收到的子进程的PID
		失败返回-1
	注意
	1.wait具有阻塞功能,
	2.wait可以实现父子进程同步
	关于status有几个带参宏
	WIFEXITED(status)
	判断子进程是否正常结束
	WEXITSTATUS(status)
	返回进程结束的值
	WIFSIGNALED(status)
	返回是由那个信号结束的
	WTERMSIG(status)
	杀死进程的编号
	6.pid_t waitpid(pid_t pid, int *status, int options);
	功能:回收进程空间
	参数:pid:
		<  -1 	回收子进程组ID与传入pid值绝对值相同的子进程空间
		== -1	回收任意子进程
		==  0	回收子进程组ID与调用函数进程PID相同的子进程空间
		>   0	回收传入pid的值所对应的空间
		status存放子进程结束状态空间首地址
		options
		0   是非阻塞
		WNOHANG 阻塞回收
	返回值:
		成功返回子进程的pid
		失败返回-1
		设置WNOHANG,没有收到子进程空间返回0
	会话组:
		同一个终端下所有进程都会在一个会话组
	进程组:
		会话组分为前台进程组喝后台进程组

在这里插入图片描述

六、exec组函数

       int execl(const char *path, const char *arg, ...);
       int execlp(const char *file, const char *arg, ...);
       int execle(const char *path, const char *arg,
                  ..., char * const envp[]);
       int execv(const char *path, char *const argv[]);
       int execvp(const char *file, char *const argv[]);
       int execvpe(const char *file, char *const argv[],
                  char *const envp[]);
       功能:
       		利用进程空间执行另外一段代码
       参数:
       		path:代码的路径
       		file:代码的名字
       		
       返回值:
			成功执行另一段代码
			失败返回-1
		execl参数以列表的形式
		execv参数与指针数组的形式
		execlp:在环境变量PATH对应路径下查找该文件
		执行系统命令
		char *getenv(const char *name);
		功能:
			获取系统环境变量
		参数:
			name:环境变量名的首地址
		返回值:
			返回成功返回变量内容字符串首地址
		int setenv(const char *name, const char *value, int overwrite)
		功能:
			设置环境变量
		参数:
			naem:设置环境变量的名字
			 value:环境变量的值
			 overwrite:
			 非0   覆盖
			 0     不覆盖
		返回值:
			成功返回0 
			失败返回-1
		int system(const char *command);
		system = fork + execlp
		在代码执行终端命令
		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值