news 2026/4/20 5:25:49

【Linux】进程(1)基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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; }

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 5:25:33

一招解决 H5 远程收款:动态支付链接优势

解决 H5 远程收款问题&#xff0c;H5 动态支付链接是较为理想的方案之一。它是移动端应用或网页端的一种支付方式&#xff0c;通过调用第三方支付平台接口生成专属支付链接&#xff0c;用户无需离开当前应用或网页即可完成付款&#xff0c;能有效解决远程异地收款难题&#xff…

作者头像 李华
网站建设 2026/4/20 5:22:45

SQL 多表查询综合练习 50 题

查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数分析&#xff1a;首先需要查询满足以下条件的学生&#xff1a;该学生同时选修了"01"课程和"02"课程该学生的"01"课程成绩 > "02"课程成绩最终输出内容…

作者头像 李华
网站建设 2026/4/20 5:22:41

FireRedASR Pro版本对比与升级指南:从v1.0到v2.0的性能飞跃

FireRedASR Pro版本对比与升级指南&#xff1a;从v1.0到v2.0的性能飞跃 如果你正在使用FireRedASR Pro进行语音识别&#xff0c;可能已经听说了v2.0版本的消息。新版本到底带来了哪些实实在在的提升&#xff1f;是值得立刻升级&#xff0c;还是再观望一下&#xff1f;升级过程…

作者头像 李华
网站建设 2026/4/20 5:12:41

《QGIS快速入门与应用基础》290:影像拉伸(直方图均衡,增强对比度)

作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…

作者头像 李华