Linux学习之进程

一.进程

  1. 进程与程序的区别
    1. 只是二进制的文件,仅占用磁盘空
    2. 进程是启动后的程序,所有参数的数据都存放在内存当前,同时还会占用系统的资源(例如cpu,物理内存等)
  2. 并行和并发
    1. 并发:在一个时间段中,有多个程序处于运行状态,且都在同一个处理机上运行,并不是同时进行,而是CPU在快速的切换任务,造成一种“同时进行”的假象。
    2. 并行:系统有多个CPU,每个CPU执行不同的进程,不同进程之间不会相互抢占CPU资源
    3.  二者的差异主要在:是同时间点发送还是在同时间段发送,是否会相互抢资源,多CPU或者多核CPU
  3.  PCB(Proces Control Block):进程控制块---结构体类型

        每一个进程都有自己独立的PCB,用于维持进程的状态和信息,以便操作系统能够更高效的管理和调度进程

        主要包括:唯一进程标志信号(id),存储进程状态,资源原理,调度和切换

        1.进程标志信息:包括进程id(PID),父进程id(PPID),用户id和组id

        2.进程状态:进程状态:初始态,就绪态,运行态,挂起态和终止态

        

        3.进程上下文信息:切换任何时需要恢复和保存进行的状态

                cpu寄存器,程序计数器,处理器状态字(PWS)

        4.内管管理信息

        5.资源管理信息

        6.进程调度信息   

        7.进程间通道信息   

这部分可以观看:https://blog.youkuaiyun.com/qq_39725309/article/details/145148504?ops_request_misc=&request_id=&biz_id=102&utm_term=PCB%EF%BC%88%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6%E5%9D%97%EF%BC%89&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-0-145148504.nonecase&spm=1018.2226.3001.4450https://blog.youkuaiyun.com/qq_39725309/article/details/145148504?ops_request_misc=&request_id=&biz_id=102&utm_term=PCB%EF%BC%88%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6%E5%9D%97%EF%BC%89&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-0-145148504.nonecase&spm=1018.2226.3001.4450https://blog.youkuaiyun.com/qq_39725309/article/details/145148504?ops_request_misc=&request_id=&biz_id=102&utm_term=PCB%EF%BC%88%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6%E5%9D%97%EF%BC%89&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-0-145148504.nonecase&spm=1018.2226.3001.4450

如果看过FreeRTOS源码,对任务调度有一定的了解的话,对于这部分应该很好了解,整体的内容大致一样

4.创建进程

        fork函数:创建子进程,子进程与父进程基本一致        

        数原型: pid_t fork(void);        

为什么要建立父子进程?

服务器与多个客户端连接,为了避免客户端之间数据干扰,可以建立父子进程分别运行保存各自的数据

可以看我写的另外一篇日记:https://blog.youkuaiyun.com/ALIANG2000/article/details/152280178?spm=1001.2014.3001.5501https://blog.youkuaiyun.com/ALIANG2000/article/details/152280178?spm=1001.2014.3001.5501

vfork();也是创建进程

vfork()和fork()的区别:

        vfokr可以直接使用父进程存储空间,不拷贝。保证子进程先运行,当子进程exit()退出后,父进程才执行

5.ps(Process Statu):查看进程信息  

        常见的指令: a :显示中断所有程序  u:以用户为主的显示程序状态 x:显示所有程序,不区分终端机(有时会开启多个终端,每个终端运行不同给的文件)

命令风格主要用途关键字段(部分)
ps ajxBSD 风格查看进程间关系(父子、会话、组)PID、PPID、PGID、SID、TTY、STAT、COMMAND
ps auxBSD 风格查看进程资源占用(CPU、内存)USER、PID、%CPU、%MEM、VSZ、RSS、COMMAND
  • ps ajx 更适合分析进程结构和关系

  • ps aux 更适合查看资源占用和性能分析

6.kill:向指定的进程发送信息,默认是发送 终止信号(SIGTERM,编号 15),但也可以用于发送其他信号。

kill [信号] <PID>
    <PID>:进程号(Process ID)
    [信号]:可选,默认为 SIGTERM(15)

 7.父子进程间的数据共享

需要注意:在读取同一个变量时,不会产生独立的物理地址,读数据时共享

但是在写数据时,父子进程都会产生各自的物理地址,先拷贝再修改--写数据不共享

https://blog.youkuaiyun.com/ALIANG2000/article/details/152282974?spm=1001.2014.3001.5501https://blog.youkuaiyun.com/ALIANG2000/article/details/152282974?spm=1001.2014.3001.5501https://blog.youkuaiyun.com/ALIANG2000/article/details/152282974?spm=1001.2014.3001.55018.exec函数族:让父子进程来执行不想干的操作,即替换进程地址空间的代码.text段,执行另外的程序,不需要创建额外的地址空间,相当在程序中调用另外一个应用程序(个人感觉有点像函数指针+回调函数的效果,都是在一个函数中执行另外一个函数)

9.孤儿进程:父进程退出,但是相对应的子进程还在运行,子进程会被init进程(进程号1)收养

僵尸进程:子进程已经终止,但父进程还没有调用 wait() 来读取它的退出状态,导致该子进程的 PCB(进程控制块)仍保留在内核的进程表中,PID 等资源未被释放。僵尸进程以终止态保存在进程表中,一直等待父进程读取退出状态的代码

僵尸进程是“已死但未收尸”的子进程,
父进程不 wait(),它就赖在进程表里不走,
唯一的办法是:让父进程负责收尸,或者干掉父进程让 init 来收。

孤儿进程和僵尸进程都是子进程

10:进程回收 :用于回收子进程退出状态的系统调用,是防止僵尸进程的关键

 wait(int *wstatus)

waitpid(pid_t pid, int *wstatus, int options)

特性wait()waitpid()
阻塞等待是(阻塞到任意一个子进程退出)可选(可阻塞,也可非阻塞)
指定子进程否(任意子进程)是(可指定 PID 或进程组)
非阻塞支持是(通过 WNOHANG
返回值成功:退出的子进程 PID成功:退出的子进程 PID(或 0 非阻塞时)
错误返回-1(无子进程或出错)-1(出错)

wait() 是“随便等一个儿子”,
waitpid() 是“指定等哪个儿子,还可以不等”,
写健壮的多进程程序,优先用 waitpid()

11:进程退出:分为 正常退出 和 异常退出 两种状态

        正常退出: main函数调用retur;进程调用exit();进程调用_exit();进程最后一个线程返回;最后一个线程调用 pthread_exit(POSIX 线程库(libpthread) 提供的函数,用来主动终止当前线程);

异常退出:调用abort函数;当进程收到某些信号时(ctrl+c);最后一个线程对取消(cancellation)请求做出反应

不管什么退出,都会释放进程所使用的寄存器等资源

在异常终止情况下,内核(不是进程本身)产生一个指示其异常终止原因的终止状态(terminationstatus)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值