20250825的学习笔记
一、进程的含义
进程是一个程序执行的过程,会去分配内存资源,cpu的调度
二、进程和程序的区别
(1)程序:静态
存储在硬盘中代码,数据的集合
(2)进程:动态
①程序执行的过程,包括进程的创建、调度、消亡。
.C ----> a.out-----> process(pid)
1)程序是永存,进程是暂时的
2)进程有程序状态的变化,程序没有
3)进程可以并发,程序无并发
4)进程与进程会存在竞争计算机的资源
5)一个程序可以运行多次,变成多个进程
②内存的分布
0-3G,是进程的空间,3G-4G是内核的空间。
③进程分类
1.交互式进程。
2.批处理进程 shell脚本。
3.守护进程。
三、进程的作用
并发,并行区别。
四、进程的状态
3个状态,就绪->执行态->阻塞(等待,睡眠)基本操作系统
Linux中的状态,运行态,睡眠态,僵尸,暂停态。
五、查询进程相关命令
1.ps aux
查看进程相关信息。
注:
1.就绪态、运行态R
2.睡眠态、等待态
可唤醒状态 S
不可唤醒状态 D
3.停止态
4.僵尸态 T
5.结束态
2.top
根据CPU占用率查看进程相关信息。
3.kill和killall
kill -2 PID 默认发15
发送信号+PID对应的进程,默认接收者关闭
killall -9 进程名
发送信号 进程名对应的所有进程
killall a.out
4.apt install / dnf install
---安装
六、进程函数
1.fork
pid_t fork();叉子
注:
①一次调用,会返回两次。
②子进程先运行和是父进程先进程,顺序不确定。
③变量不共享。
④子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。
(1)功能:通过该函数可以从当前进程中克隆一个同名新进程。
注:
①克隆的进程称为子进程,原有的进程称为父进程。
②子进程是父进程的完全拷贝。
③子进程的执行过程是从fork函数之后执行。
④子进程与父进程具有相同的代码逻辑。
(2)返回值:int类型的数字
在父进程中:成功 返回值是子进程的pid号>0
失败 返回-1
在子进程中:成功 返回值 0
失败 无
2.getpid
pid_t getpid(void);
(1)功能:
获得调用该函数进程的pid
(2)参数:
缺省
(3)返回值:
进程的pid
3.getppid
pid_t getppid(void);
(1)功能:
获得调用该函数的父进程的pid号
(2)参数:
缺省
(3)返回值:
返回父进程的id号
4.应用场合
1)一个进程希望复制自己,使父子进程同时执行同的代码段。网络服务中会比较多见。
2)一个进程需要执行一个不同的程序。
5.父子进程的关系
子进程是进程的副本。子进程获得父进程数据段,堆,栈,正文段共享。在fork之后,一般情况那个会先运行,是不确定的。如果非要确定那个要先运行,需要IPC机制。
6.区别
1)fork的返回值
2)pid不同
七、进程的终止
1) main 中return
2)exit,c库函数,会执行io库的清理工作,关闭所有 的流,以及所有打开的文件。已经清理函数(atexit)。
3)_exit,_Exit 会关闭所有的已经打开的文件,不执行清理函数。
4)主线程退出
5)主线程调用pthread_exit
6)abortO
7) signal kill pid
8)最后一个线程被pthread_cancle
八、进程的退出
注:僵尸进程:进程执行结束但空间未被回收变成僵尸进程。
1.exit 库函数
退出状态,终止的进程会通知父进程,自己使如何终止的。如果是正常结束(终止),则由exit传入的参数。如果是异常终止,则有内核通知异常终止原因的状态。任何情况下,负进程都能使用wait,waitpid获得这个状态,以及资源的回收。
void exit(int status)
exit(1); 25.6 KB/s 598 KB/s
(1)功能:
让进程退出,并刷新缓存区
(2)参数:
status:进程退出的状态
EXIT_SUCCESS 0
EXIT_FAILURE 1
(3)返回值:
缺省
2._exit系统调用
void _exit(int status);
(1)功能:
让进程退出,不刷新缓存区
(2)参数:
status:进程退出状态
(3)返回值:
缺省