Linux进程基础
前言:并行和并发
1.并发:在操作系统中是指一个时间段中有几个进程都处于正在运行到运行完毕之间,且它们都是在同一个处理器上运行的,抢占了共享的这个CPU资源
在用户的视角上,这些进程看似同时进行,但不是真正意义上的“同时进行”,因为只有一个处理器,在固定的时刻只有固定的进程被执行了,只不过CPU处理的速度很快,它把一个时间段划分成很短的时间片段,然后在这之间来回切换。这个时间片段短到人无法感知的程度,所以才能让用户感觉是多个进程同时在进行。并发也称时分复用,是系统对于进程的一种调度管理
2.并行:系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,是真正的同时进行,这种方式我们称之为并行
其实决定并行的因素不是CPU的数量,而是CPU的核心数量,比如一个CPU多个核也可以并行
一、进程的概念
.c文件通过命令gcc xxx.c -o 程序名 编译成二进制文件并给它取了个名字 这就是程序
-
程序:二进制文件,存在ROM(flash、磁盘...),属于静态概念
-
进程:程序的一次执行过程,启动中的程序,存在RAM运行内存中,占用cpu,属于动态概念
shell上查看当前进程的命令有:
- ps 显示当前目录的进程
- ps -elf 或 ps -aux显示查看当前所有进程
- ps -elf|grep xxx 符号'|'是管道符,可以过滤出与"xxx"相关的进程
- top 类似windows上的"任务管理器"
显示所有进程,能看到有关每个进程具体的信息,有PID、CPU占用率、创建时间等。
其中:PID 是进程标识符,它是一个非负整数,对于每个进程而言都是唯一的(进程创建后就会获得一个PID,如果进程退出或被杀死后,这个PID也会消失,留给之后的进程用)
不过有一些PID是固定的:
0 交换进程(进程调度用的)
1 init进程 (系统初始化时设置配置文件的工作
二、进程的空间分配
当一个程序被执行的时候,系统自动为进程分配如下的虚拟内存(物理内存不可直接访问)
-
命令行参数环境变量:main函数的参数:int argc ,char **argv
-
stack栈:局部变量(不包括static声明的变量)、函数调用时的入参、返回地址
-
heap堆:进程运行中调用malloc申请的动态内存
-
bss:未初始化的全局变量
-
data:数据段,已初始化的全局变量
-
txt:代码段
-
进程控制块(pcb):除包含上面的内容,还存放了进程的属性,有PID、进程用户、进程状态、优先级(优先级高的进程先执行)、文件描述符表(记录进程中打开的文件,最多可打开1024个文件)
三、进程类型
-
交互进程:在shell下启动(shell本身也是一个进程),可在前台和后台运行(用得多),shell窗口上正在运行的进程可用ctrl Z 使其在后台运行,但 ctrl C 关不掉后台进程
-
批处理进程:作业队列中按顺序执行的(用得少)
-
守护进程:特殊的后台服务进程,独立于终端,一直在后台运行,守护进程无法被shell命令切换为前台进程
jobs 查看后台进程
bg [进程序号] 将挂起的进程放在后台运行
fg [后台进程序号] 把后台运行的进程放到前台运行
./程序名 & 程序后台运行
原文地址:https://blog.csdn.net/2301_79532069/article/details/144119328
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!