当前位置: 首页 > news >正文

【Linux】进程(1)基础

目录

一、进程的基本概念

二.描述进程(PCB)

1.基本概念:

2.task_struct(操作系统中的先描述,再组织)

(1)task_struct里的一些重要内容的:

(2)组织进程

(3)查看进程

(4)通过系统调用获取进程标识符

(5)通过系统调用创建进程-fork()


一、进程的基本概念

概念:程序的一个执行实例,正在执行的程序等

内核观点:担当分配系统资源(如CPU时间,内存)的实体

进程 =内核数结构(task_struct) + 自己的程序代码和数据(操作系统中的先描述

二.描述进程(PCB)

1.基本概念:

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。

其名称为PCB,Linux操作系统下的PCB为task_struct,在Linux中描述进程的结构体叫做task_struct。

task_struct是Linux内核的一种数据结构类型,它会被装载到RAM(内存)里并且包含着进程的信息。装载到内存时,会形成对应的页表

2.task_struct(操作系统中的先描述,再组织)

(1)task_struct里的一些重要内容的:

标示符:描述本进程的唯一表示符(该进程的id:PID),用来区别其他进程。

在代码中可以用getpid()函数获取。该进程的父进程id:PPID

状态:任务状态(S、R、Z等等),退出代码,退出信号等。

优先级:相对于其他进程的优先级。

程序计数器:程序中即将被执行的下一条指令的地址。

内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。

上下文数据:进程执行时处理器的寄存器中的数据。

I/O状态信息等其他信息。

(2)组织进程

task_struct是双链表形式(next、prev指针)存在于内核中,内核中会以链表形式管理task_struct。

(3)查看进程

1.进程的信息可以通过/proc系统文件夹查看,

如想查看PID(进程的ID)为1的进程信息,就查看/proc/1这个文件夹

2.大多数进程信息可以使用top和ps这些用户及工具来获取

(4)通过系统调用获取进程标识符

#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { printf("pid: %d\n", getpid()); printf("ppid: %d\n", getppid()); return 0; }

(5)通过系统调用创建进程-fork()

在Linux系统中可用man fork指令来查看fork函数的用法

fork用来创建子进程,有两个返回值:

1.成功创建子进程时,父进程中fock()返回子进程id,如果失败返回小于0的数

2.子进程中fork()返回0

父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)

#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { int ret = fork(); printf("%d, ret: %d\n", getpid(), ret); sleep(1); return 0; }

fork()生成的子程序会独一份运行原本代码fork()函数后的代码。

所以fork之后可以用if进行分流

#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { int ret = fork(); if(ret < 0) { perror("fork"); return 1; } else if(ret == 0) { //child printf("I am child : %d, ret: %d\n", getpid(), ret); } else { //father printf("I am father : %d, ret: %d\n", getpid(), ret); } sleep(1); return 0; }

以上讲述的是进程的基本概念,进程的描述、组织,如何创建子进程,如何查看进程,下一章将详细讲述进程的状态。

http://www.jsqmd.com/news/669624/

相关文章:

  • Pixel Aurora Engine 算法原理浅析:从扩散模型到惊艳生成
  • 2026年知名的SJA丝杆升降机/非标丝杆升降机/伞齿轮丝杆升降机/SWL丝杆升降机生产厂家推荐 - 行业平台推荐
  • FlowState Lab 赋能智能运维:服务器异常波动检测与根因分析
  • 2026年口碑好的锥齿轮螺旋升降机/滚珠螺旋升降机/螺旋升降机/多台同步螺旋升降机品牌厂家推荐 - 品牌宣传支持者
  • Wan2.2-I2V-A14B一文详解:Diffusers pipeline定制与自定义scheduler实践
  • 一招解决 H5 远程收款:动态支付链接优势
  • FireRedASR-AED-L效果展示:同一人不同语速(慢速/常速/快速)识别对比
  • Kotaemon效果展示:实测文档问答,回答精准度惊艳
  • 项目做了一半想重写?这套前端架构让你少走3年弯路
  • Linux 的 runcon 命令
  • 别再只用RMSE了!用evo的绘图功能给你的SLAM论文加个“颜值Buff”
  • 2026年比较好的哈尔滨水泥制品/哈尔滨水泥制品彩砖/哈尔滨水泥制品流水槽实力工厂推荐 - 行业平台推荐
  • 云计算Linux——基础操作命令(一)
  • 事务四大特性(ACID)、四大隔离级别、Spring 七大事务传播行为
  • 一文讲清,排班管理系统是什么意思?排班管理系统如何优化企业用工?
  • 忍者像素绘卷参数详解:Steps=20/30/50对16-Bit像素块清晰度影响可视化分析
  • STM32F407驱动无刷电机:用CubeMX和HAL库快速实现SimpleFOC开环调速
  • 对于所有翻译从业者而言,唯有认清自身定位,敬畏信息、坚守操守、精进专业,才能在翻译之路上行稳致远。
  • 告别枯燥协议文档:用Wireshark抓包和Python脚本‘看见’JESD204B的链路建立过程
  • 2026年靠谱的哈尔滨步道板流水槽/哈尔滨步道板水泥盖板/黑龙江步道板水泥砖销售厂家推荐 - 品牌宣传支持者
  • Phi-3-vision多模态模型体验:用Chainlit前端轻松实现图片问答
  • AI开发-python-langchain框架(--提取pdf中的图片 )
  • Pi0机器人模型亲测体验:Web界面操作简单,动作生成快速
  • 别再手动算相位增量了!Vivado 2023.2里用Xilinx DDS IP核生成1MHz正弦波的保姆级教程
  • 前端手记(二):Axios 封装与 FastAPI 联调
  • 2026年靠谱的低噪音电机/电机定制/螺杆真空泵配套电机/定制化电机公司口碑推荐 - 行业平台推荐
  • AGI自主编写0day Exploit仅需23秒?实测GPT-5、Claude-4、Qwen-AGI在CVE-2024-XXXX系列漏洞上的武器化效率对比
  • 丹青幻境在儿童美育中的应用:AI辅助古诗配画与想象力激发教学实践
  • CSS如何解决栅格重叠问题_使用Grid-area明确划分元素占位
  • 从Arduino到树莓派:玩转开源硬件,你的‘地’接对了吗?避坑指南与实测对比