C语言高级操作(三)——进程(重要程度:☆*5)

进程

1、进程的概念

  • (1)程序:是一段存放在外存中代码的集合(死的)
  • (2)进程:是一个程序动态执行的过程,包括创建、调度、消亡(活的)

2、进程的创建

进程创建后,操作系统为进程分配独立的4G虚拟空间
进程空间包括:
	1.文本段(.text)
		存储代码和指令
	2.数据段
		1.字符串常量区
			.rodata 
		2.未初始化静态变量/全局变量
			.bss
		3.已初始化静态变量/全局变量
			.data
	
	3.系统数据段
		1.堆区
			程序员手动管理区域
			程序员负责申请(malloc)释放(free)
			堆区增长方向自低向高
			
		2.栈区
			操作系统管理区域
			操作系统负责申请释放
			栈区增长方向自高向低
			
	4.内核区域
		1.CPU管理
		2.内存管理
		3.文件系统管理
		4.硬件设备管理
		5.进程管理

3、进程创建关系

	父子进程:
		父进程:创建新进程的进程称为新进程的父进程
		子进程:被创建的进程称为原进程的子进程
	
	内核进程
	init进程
	所有进程任务
	
	pstree

4、进程相关命令

1.top
根据CPU占用率查看进程信息
q 退出

	  PID:进程的ID号(唯一)
	  PPID:父进程的ID号
	  
	2.ps -ef
      查看当前时刻进程信息		

	3.ps -aux
	  查看进程状态

	4.pstree
	  查看进程关系
	  
	5.kill
	  kill -9 进程PID
	  killall -9 进程名
	  
	6.jobs
	  查看后台执行任务
	  
	7.fg 编号
	  让一个后台执行的任务放到前台执行
	
	8.nice
	  按照优先级运行进程任务
	  
	9.renice
	  重新设定进程任务的优先级

5、进程调度:

保障多个任务能同时执行
	宏观并行
		多个任务同时向下执行
	微观串行
		CPU在多个任务中快速切换,保障多个任务同时向下执行

中断:
	
进程调度算法:
	1.先来先执行,后来后执行
	2.短作业优先
	3.高优先级调度算法
	4.时间片轮转调度算法
	5.多级队列反馈调度算法
	6.负载均衡调度算法
	
	时间片:CPU在一个任务中执行的一段时间

6、进程状态:

1.运行态	R
	正在执行,且被CPU任务调度所执行的进程
	
2.就绪态	R
	正在执行,没有CPU任务调度执行的进程
	
3.可唤醒等待态	S
	也称为睡眠态,阻塞等待资源的进程
	
4.不可唤醒等待态 D
	不想被CPU任务调度所打断的进程任务可以设置为不可唤醒等待态
	
5.暂停态	T
    被暂停执行的进程
	
6.僵尸态    Z
	进程执行结束,空间没有被回收
	
7.结束态    X
	进程执行结束,空间被回收

7、进程相关接口:

1.fork 
  pid_t fork(void);
  功能:
	创建一个子进程空间
  参数:
	缺省
  返回值:
	失败返回-1 
	成功父进程中返回子进程的PID
	    子进程中返回0 
	
2.getpid
  获得调用进程的pid

3.getppid 
  获得调用进程父进程的pid,
  
  创建一个父进程的2个子进程,在两个子进程中打印自己的PID和父进程的PID
  在父进程中打印自己的PID和两个子进程的PID
	
异步:
	执行顺序没有任何联系

同步:
	在某一时刻,任务具有先后执行的顺序关系

4.exit
  void exit(int status);
  功能:
	进程结束 
  参数:
	进程结束的状态
  返回值:
	程序结束没有返回
	
5._exit
  void _exit(int status);
  功能:
	进程结束 
  参数:
	进程结束的状态
  返回值:
	程序结束没有返回
	
6.atexit
  int atexit(void (*function)(void));
  功能:
	注册退出注册函数
  参数:
	function:函数指针 
  返回值:
	成功返回0
	失败返回-1 

8、僵尸进程如何产生?

僵尸进程:进程执行结束,空间没有被回收 
如何产生:子进程运行结束,父进程没有回收子进程空间
如何避免产生僵尸进程:
	1.可以使用wait或waitpid回收子进程空间
	2.让父进程先结束,子进程后结束

孤儿进程:当前进程的父进程结束,当前进程称为孤儿进程,父进程会变成init进程(1号进程)

9、进程的回收:

wait
pid_t wait(int *status);
功能:
	回收子进程空间
参数:
	status:存放子进程结束状态空间首地址
返回值:
	成功返回回收到子进程的PID
	失败返回-1 

阻塞等待 
实现同步功能

WIFEXITED(status)
检测进程是否正常结束

WEXITSTATUS(status)
获得进程结束时返回的值

WIFSIGNALED(status)
检测进程是否被信号杀死

WTERMSIG(status)
获得杀死进程的信号编号

经验之谈

(1)如果在子进程创建之前,定义一个指针,那么在父进程和子进程中,这个指针指向的地址是一样的。

作业

1.创建一个父进程和9个子进程,父进程中打印自己的PID和所有子进程的PID
  子进程中打印自己的PID和父进程的PID

2.编写ps的命令查看当前操作系统所有进程任务的信息
PID  PPID   USER  GROUP   STAT  COMMAND

/proc
纯数字的文件夹都对应一个进程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风栖柳白杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值