学习笔记第二十三天

简介: 【8月更文挑战第14天】

1.程序与进程
程序(Program):是静态的,它是一组指令的集合,这些指令被存储硬盘上,,程序本身

不占用CPU或内存资源,直到它被加载到内存中执行。

    程序---静态---硬盘

    进程(Process):是动态的,是程序在内存中的一次执行过程,当程序被加载到内存并由

CPU执行时,它就成为了一个进程。

    进程---动态---内存
  1. 进程的结构

     进程 = pcb +进程实体。
    
     进程实体:
    
            堆(Heap):堆是进程在运行时用于动态分配内存的区域。
    
            栈(Stack):栈是进程内存中的一个区域,用于存储局部变量和函数调用的上下文(包
    

括参数、返回地址等)。栈的存取特点是后进先出(LIFO,Last In First Out)。

            bss(Block Started by Symbol):bss段(Block Started by Symbol)是程序中未初始

化的全局变量和静态变量的存储区域。

           data:data段(或称为初始化数据段)是程序中已初始化的全局变量和静态变量的存储

区域。

           text(或称为代码段):text段(也称为代码段或正文段)是存储程序指令的区域。

3.创建进程:
进程可以通过多种方式创建,如fork()系统调用在Linux中创建与父进程几乎完全相同的子进

程。

    创建进程时,系统会为进程分配必要的资源,包括内存空间、文件描述符等,并设置进程的

状态为就绪(等待CPU调度)。

    3.1执行任务:
    进程在执行任务时,可以执行与父进程相同的任务(如fork()后直接运行),也可以执行完

全不同的任务(如fork()后exec()新程序)。

    进程在执行过程中会占用CPU资源,进行数据的读写操作,处理信号等。

    进程的状态会随着执行过程而变化,包括就绪(R)、睡眠(S,等待IO等操作完成)、不可

中断睡眠(D,通常是因为IO操作)、停止(T,收到停止信号)等。

    3.2进程结束:
    进程执行完毕后,会调用exit()函数退出。进程退出时,会释放其占用的所有资源,包括内

存、文件描述符等。

    进程退出后,根据其父进程的状态,可能会成为孤儿进程(父进程已退出)或僵尸进程(父

进程未回收其状态信息)。

    僵尸进程则需要其父进程通过wait()或waitpid()等系统调用来回收其状态信息,避免资源泄

露。

    孤儿进程会被系统自动分配给init进程(PID为1的进程)作为其父进程。

4.进程的作用
并发:通过进程,系统可以并发地执行多个任务,提高资源的利用率和系统的吞吐量。

    资源管理:进程是系统进行资源分配和调度的基本单位,通过进程管理,系统可以合理地分

配和使用CPU、内存等资源。

    隔离性:进程之间相对独立,一个进程的崩溃不会影响其他进程的运行,提高了系统的稳定

性和可靠性。

5.进程状态
Linux中进程的状态主要有以下几种:

D:不可中断睡眠状态,通常是因为IO操作。
R:就绪状态,在就绪队列中等待CPU调度。
S:可中断睡眠状态,等待某个事件完成。
T:停止状态,收到停止信号或正在被跟踪。
Z:僵尸状态,进程已终止但未被父进程回收。

  1. 查询进程相关命令

     6.1ps aux | grep 进程名
    
     该命令用于查看与指定进程名相关的进程信息。输出结果中的ST列表示进程的状态        
    
     6.2top
    

    top命令提供了一个动态的实时视图,显示了系统中各个进程的CPU、内存使用情况等信息。

它可以根据CPU占用率对进程进行排序,并实时更新显示的信息。

    6.3kill和killall

    kill PID:向指定PID的进程发送SIGTERM信号,请求进程终止。进程可以选择忽略或捕获该

信号,但默认情况下会终止执行。

    kill -9 进程PID号:向指定PID的进程发送SIGKILL信号,强制终止进程。SIGKILL信号不能被

捕获、阻塞或忽略。

    kill -l:列出所有可用的信号及其编号。

    killall -9 进程名:向所有名称匹配指定字符串的进程发送SIGKILL信号,强制终止它们。

    killall a.out:向所有名称为a.out的进程发送SIGTERM信号,请求它们终止.

6.4getpid

pid_t getpid(void); //pid_t

功能:获得调用该函数进程的pid。

返回值:进程的pid号。

6.5getppid

pid_t getppid(void);

功能:获得调用该函数进程的父进程pid号。

返回值:返父进程pid号。

相关文章
|
存储 算法 测试技术
【C++从0到王者】第十八站:手把手教你写一个简单的优先级队列
【C++从0到王者】第十八站:手把手教你写一个简单的优先级队列
80 0
|
1月前
|
C++
C++番外篇—— ostream和istream详解
C++番外篇—— ostream和istream详解
77 1
|
存储 机器学习/深度学习 人工智能
第一课(三)|学习笔记
快速学习第一课(三)
147 0
第一课(三)|学习笔记
|
SQL 算法 数据库
第一课(一)|学习笔记
快速学习第一课(一)
243 0
第一课(一)|学习笔记
|
数据采集 机器学习/深度学习 运维
玩吧|学习笔记
快速学习玩吧
玩吧|学习笔记
|
存储 程序员 编译器
C语言程序设计现代方法--碎银几两(跑路人笔记)
C语言程序设计现代方法--碎银几两(跑路人笔记)
|
负载均衡
第七天学习笔记
参加训练营的感想与收获
|
存储 安全 搜索推荐
第六天学习笔记
案例分享——钉钉
|
弹性计算 NoSQL 安全
第五天学习笔记
搭建个人Leanote云笔记本
|
弹性计算 关系型数据库 数据库连接
第四天学习笔记
使用PolarDB和ECS搭建门户网站
下一篇
无影云桌面