Linux:进程

上篇文章:Linux:进程入门

目录

1.进程基本概念

进程是什么

进程存在意义

怎样完成进程

PCB

task_struct

组织进程

2.查看进程

2.1getpid

2.2查看进程的做法

[2.2.1 /proc 系统文件夹](#2.2.1 /proc 系统文件夹)

2.2.1.1当前路径再认识

2.2.2命令

2.3getppid

bash

3.通过系统调用创建进程-fork


1.进程基本概念

进程是什么

进程 = 内核数据结构(struct task_struct) + 程序的代码和数据

进程存在意义

现实实例:启动的所有程序,全部会被转换为进程,被操作系统运行

用户要让OS帮忙执行某个任务,加载某个程序,全部都会被转换为进程,进程就是代表用户,来完成用户的需求。因此,所有的指令执行,工具执行,软件执行都属于进程。

怎样完成进程

OS内部可以同时存在多个进程,OS要对进程做管理,方式是先描述(进程必然在内核中,存在对一个的内核数据结构struct xxx {};再组织(用某种数据结构(链表)管理起来)

PCB

Process Ctrl Block,进程模块:struct task_struct{进程属性,链接字段等}

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

Linux操作系统下的PCB是:task_struct,也是PCB的一种

在Linux中描述进程的结构体叫做task_struct,其是Linux内核的一种数据结构类型,它会被装载到RAM(内存)里并且包含着进程的信息

task_struct

内容分类:

标示符:描述本进程的唯一标示符,用来区别其他进程。状态:任务状态,退出代码,退出信号等

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

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

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

上下文数据:进程执行时处理器的寄存器中的数据(休学例子,要加图CPU,寄存器)

I/O状态信息:包括显示的I/O请求,分配给进程的I/0设备和被进程使用的文件列表

记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等

组织进程

可以在内核源代码里找到它,所有运行在系统里的进程都以task_struct双链表的形式存在内核里

2.查看进程

2.1getpid

getpid:获取pid(进程id)

2.2查看进程的做法

2.2.1 /proc 系统文件夹

其中蓝色的数字是特定进程的pid

对于小型的进程,在其被调用时删除磁盘中的源程序,依旧可以维持运行。

2.2.1.1当前路径再认识

在程序运行过程中,有一个cwd的程序其全称为:current work dir,这是属于进程的基本属性之一

而此时我的当前路径为:

综上,当前路径就是为了支持进程访问文件时,缺省路径的问题。

而我们指的当前路径,具体是指当前进程的工作路径

chdir:可以修改路径

getcwd:获取当前进程的工作路径

示例:

2.2.2命令

top 或 ps 或 ps axj

ps使用:

查询示例:

2.3getppid

getppid:获取ppid(父进程)

运行后,每一次父进程都不会发生改变:

查询:

bash

命令行启动时,创建的对应的进程,父进程都是bash,命令行解释器也是一个进程

bash是进程中的一个驱动循环,每一次登录,系统会自动提供bash,来进行命令行服务。

在上图中,带-的bash是指远程登陆的bash,可以通过exit退出bash,如果行不通也通过kill那行命令可以强制关掉进程。

那么类似于bash,它是如何创建子进程的呢?

3.通过系统调用创建进程-fork

运行:

发现下一行的父进程是上一行的子进程,原因是因为fork有两个返回值,导致父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)

fork返回值:

使用if语句进行分流,让两个进程同时进行:

fork()的返回值有三种情况:

  1. 返回 0 :表示当前执行的是子进程。

  2. 返回一个正数(子进程的PID) :表示当前执行的是父进程。

  3. 返回 -1:表示创建进程失败(代码中没有处理这种情况)。

本章完。

相关推荐
Decay__1 分钟前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
贞明电子2 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
HideF3 小时前
Linux
linux·服务器·网络
万联WANFLOW3 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
Ruiery4 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
乌恩大侠5 小时前
从 AI-RAN 到 AI Agent:基于 NVIDIA Nemotron 构建 5G/6G 智能网络故障诊断系统
服务器·人工智能·5g·o-ru·ai-ran·电信大模型
Decay__6 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
丰锋ff7 小时前
压缩命令笔记
linux
江华森7 小时前
数据中心基础设施运维实战:概述与实验环境搭建
运维
迪菲赫尔曼7 小时前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测