目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、进程的概念?
1.1 什么是进程
进程可以从两个方面来看:1.对于用户而言进程是运行中的程序。2.对于系统而言进程是对于程序动态运行的描述,在Linux下进程是一个结构体,通过这个结构体不仅仅包含了正在运行的代码,还包括了运行代码所需要的各种资源。称之为PCB。
1.2 PCB是什么
PCB是操作系统用于管理和控制进行的核心数据结构。它主要包含PID—标识符(每个进程都有一个标识符,用于操作系统的内部管理与调度)。程序计数器,上下文数据(即包含现在运行程序的数据和下一步要运行程序的数据,当你关闭电脑在打开软件上次关闭的数据都在就是因为这样)。内存指针(指向程序数据在内存中的地址)。I/O信息状态,数据的优先级。进程状态(描述当前进程的状态以便于操作系统对于程序能够合理的运行——运行态、就绪态、阻塞态)。
1.3 Linux下的进程状态
运行态—R:正在运行以及拿到时间片就能运行的程序
中断休眠态—S:可以被打断的休眠态,调度的时候需要判断唤醒条件
不可中断休眠态—D:不可被打断的休眠态,只能在唤醒条件满足后切换状态(读写磁盘态)
停止态—T:停止运行(不做任何事)
僵尸态—Z:进程已经结束执行,但资源没有被完全释放。也称为僵尸进程。
1.4 父子进程
当前进程(父进程)通过复制自身,创建了一个新的进程(子进程)。这两个进程就形成了父子关系。子进程是父进程的复制品,它们共享代码,但数据独有。这种机制允许操系统同时运行多个程序,并且每个程序运行在独立的进程中,互不干扰。
二、进程详细
2.1 创建进程
创建进程就是创建对PCD的描述信息
指令 pid_t fork(void);
fork():是一个系统调用。复制当前父进程创建一个新的进程(子进程)。
它具有三种返回值。
返回值小于0:创建子进程失败。
返回值等于0:只有在子进程中存在
返回值大于0:只有在父进程中出现
通过fork()函数我们就可以区分父子进程,并且能利用父子进程。
exec() 用于替换当前进程的映像,不创建新的进程
wait() 和 waitpid() 用来等待子进程结束,并回收资源
ps指令用来查看进程信息,这里用ps - u指令来查看进程信息
2.2僵尸进程
产生:子进程先于父进程退出,退出成功需要保存退出码,因此资源没有完全被释放,这时候就处于僵尸状态,形成了僵尸进程。
退出码:子进程的退出码是一个整数值,用来指示进程的退出状态,无论是正常终止还是异常终止都会返回一个退出码,用以判断进程的退出状态。正常退出为0
如何避免僵尸进程
调用 wait 或 waitpid 等待子进程结束。
处理方法
退出父进程
僵尸进程的危害
僵尸进程无法被杀死只能通过退出父进程的方式来处理
2.3 孤儿进程
产生
父进程先于子进程退出,子进程就会成为孤儿进程。
特性
1.运行在后台。2,父进程成为init进程(PID 1)
处理
init进程会负责孤儿进程的清理工作(等待孤儿进程结束并回收资源)
守护进程
特殊的孤儿进程,运行在后台,父进程成为init进程(PID 1) ,并且不受终端的影响。通常用于提供长期运行的服务。
三、环境变量
功能
用来进行系统运行环境配置的变量
优点
灵活,立即生效
指令
env:查看所有环境变量
set:查看当前环境所有变量
echo:查看指定环境变量的数值
export:用于声明环境变量
unset:删除指定变量
典型的环境变量 PATH
接口:const char* getenv(const char* name);—用于获取指定环境变量的值
变量格式
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
修改PATH变量
PATH = $PATH:/path/to/new/directory —临时修改PATH变量
作用
环境变量具有同一终端内的继承特性,基于这个特性,环境变量有时会被用于设定程序的一些参数(在进程中传递数据)
继承特性指父进程创建子进程之后会将自己所拥有的环境变量都设置给子进程。
总结
PCB是什么:用来记录进程的信息,对程序动态运行的描述;
常见进程状态有五种;
僵尸进程和孤儿进程的区别:僵尸进程子进程先于父进程退出。孤儿进程父进程先于子进程退出;
为什么要配置环境变量:方便程序执行,直接通过配置的环境变量来搜索可执行程序。设置特定的环境变量可以设置程序的参数。创建子进程之后会将父进程的环境变量自动传给子进程;