进程|详解~什么是进程 以及 进程创建原理和过程

news2024/11/16 9:21:56

1.什么是进程

进程是正在运行的程序。

UNIX标准将进程定义为:其中运行着一个或者多个线程的地址空间和这些线程所需要的系统资源(分配给线程线程共享系统资源)。

组成:进程由程序代码、数据、变量(占用着系统内存)、打开的文件(文件描述符)、环境组成。

2.进程的结构

PID:进程标识符——取值范围为2 到 32768(各系统最大值不一样)的正整数,进程被启动时,系统会按顺序将下一个未被使用的数字作为进程PID,转完一圈又会重新从2开始。

3.进程表——PCB

进程表,也称进程控制块(PCB),将当前加载到内存的所有进程的有关信息记录在一个表中,其中包括进程PID、进程的状态、命令字符串和其他一些ps命令输出的各类信息(进程描述信息和控制信息)。每个进程占用其中一个表项,PID是进程表的索引,操作系统通过PID对进程进行管理。

在典型的系统中包含如下关键字段:

3.1进程管理相关

包含三大类信息;

1)标识信息:用于唯一地标识一个进程,包括进程ID、父进程、进程组等。

2)现场信息:用于保留一个进程在运行时存放在处理器现场中的各种信息。它们用于在进程切换是保存处理器现场和恢复处理器现场。包括通用寄存器、PSW、堆栈指针、程序计数器等。

3)控制信息:用于管理和调度一个进程。包括进程开始时间、使用CPU的时间等。

3.2存储管理相关

1)正文段指针

2)数据段指针

3)堆栈段指针

3.3文件管理相关

根目录、工作目录、文件描述符、用户ID、组ID等

4.查看进程

1.ps命令可以查看所有者当前正在运行的程序、其他用户正在运行的程序、系统正在运行的所有程序。

UID:该进程执行的用户ID

PID:进程标识符

PPID:父进程标识符

C:cpu的占用率,形式是百分数

STIME:进程的启动时间

TTY:终端设备,显示进程是从哪一个终端启动的

TIME:进程目前为止占用cpu的时间(进程的执行时间)

CMD:启动进程时所用的命令 / 该进程的名称或对应的路径

2.ps常用组合命令

ps -ef|grep 进程名称

 同时运行多个进程可以将进程放在后台运行     

./b& ./a&

5.进程创建原理

Lnux上创建新进程的方式:fork()+exec();

使用写时拷贝技术,复制bash的一部分,然后再进行替换。

bash:命令解释器,允许用户向操作系统输入需要执行的命令。

打开一个终端,会默认运行bash进程,直到退出终端bash终止。(注:同一个程序,每次运行起来的PID都不会相同,因为PID唯一标识进程)

不同的终端,默认的bash不同(PID不相同)

6.进程替换exec系列

/*man execl看帮助手册*/
//path:新替换的程序的路径名称
//arg:传给新程序主函数的第一个参数,一般为“程序的名字”,还可以将替换的新程序改名字,同样会替换成功
//arg后面是剩余参数列表,参数个数可变,必须以空指针作为最后一个参数以此来结尾
/*
...为可变参数,例如:printf函数有可变参数,printf("%d%d%s",m,p,q)参数可变
*/
int execl(const char* path, const char * arg,...);
int execlp(const char* file, const char * arg,...);//在环境变量PATH指定的路径里面搜索;
int execle(const char* path, const char * arg,...,char* const envp[]);

int execv(const char * path, char* const argv[]);//把参数都放在了一个数组中
int execvp(const char * file, char* const argv[]);
int execve(const char * path, char* const argv[],char* const envp[]); //系统调用

//前五个是库函数,最后一个是系统调用,所以本质上:前5个都是通过底层调用第六个系统调用实现的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/889278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

经典文献阅读之--LIW-OAM(LiDAR-IMU-编码器融合SLAM)

0. 简介 我们之前经常接触的是使用激光雷达和惯性测量单元(IMU)的互补信息,但是实际使用的过程中IMU如果发生剧烈的颠簸,有可能会导致IMU失效。在广泛使用的迭代最近点(ICP)算法只能为姿态提供约束,而速度只能由IMU预…

Linux系统的历史记录添加时间和IP信息

1 系统history记录优化 默认情况下,系统是不会记录我们执行命令的时间等相关信息的。 1.1 HISTCONTROL 介绍 使用HISTCONTROL变量,您可以控制 bash 如何存储您的命令历史记录。您可以告诉它忽略重复的命令和/或忽略具有前导空格的命令。 在命令行工作…

亚马逊新品如何快速上首页

将亚马逊新品快速上首页是许多卖家的目标,但要注意,这涉及到多种因素,包括产品质量、市场竞争、营销策略等。以下是一些可能帮助您的亚马逊新品快速上首页的方法: 1、优化产品信息:确保您的产品标题、描述和关键词字段…

Scratch 之 如何制作鼠标框(1)—— 绘制鼠标框

hello,大家好,今天给大家带来如何绘制鼠标框 我们正式开始 首先,让我们绘制一个空角色 然后让我们来编代码 1、准备工作 (1)拓展 画笔 添加这个拓展↑ (2)变量 实际上,你只需…

Systemverilog 接口 interface modport使用说明

一、接口的定义   SystemVerilog在Verilog语言基础上扩展了“接口”(interface)结构,SystemVerilog增加了新的端口类型—接口,接口允许许多信号合成一组由一个端口表示,只需在一个地方对组成接口的信号进行声明&am…

4G无线网络草坪音箱,4G石头音箱

SV-7042UG 4G无线网络草坪音箱,4G石头音箱 一、描述 SV-7042UG是深圳锐科达电子有限公司的一款壁挂式4G无线网络草坪音箱,通过4G无线卡联网,可将网络音源通过自带的功放和喇叭输出播放,其采用防水设计,功率40W。SV-70…

chatgpt 翻译整本英文电子书,效果非常好

1. 注册chatgpt账号,登录后设置好API token。 https://platform.openai.com/account/api-keys 一定要把生成的token先复制保存好,对话框消失后就无法看到完整token了。 2. 配置免费的cloudflare workers 代理,否则很容易被封号 参考文档 h…

【Windows系统编程】05.内存操作与InlineHook(详解InlineHook实现)

文章目录 内存相关InlineHook完整实现代码&#xff08;dll&#xff09;&#xff1a; InlineHook测试&#xff1a; 内存相关 内存信息 头文件&#xff1a;#include <Psapi.h> //检索有关系统当前使用物理内存和虚拟内存的信息MEMORYSTATUSEX mst;GlobalMemoryStatusEx…

docker 容器满了常用处理方法

docker 容器满了常用处理方法 1、运行 df -h 查看剩余磁盘占用情况 2、进入到docker目录 cd /var/lib/docker 3、运行du -h --max-depth1 &#xff08;检索文件的最大深度1&#xff0c;即只检索汇总计算当前目录下的文件&#xff09; 4、进入占用最大的 /containers文件夹&am…

pg各种条件判断语句

1.基本查询 搜索语句&#xff1a; select (distinct&#xff08;去重&#xff09;) 内容&#xff08;*代表所有&#xff09; as 别名 from 表 注释&#xff1a; -- 快速查询&#xff1a;select 内容 AS 别名 没有表一般当做计算器来用 2.条件查询 null只能用is 或者is…

7.11 Java方法重写

7.11 Java方法重写 这里首先要确定的是重写跟属性没有关系&#xff0c;重写都是方法的重写&#xff0c;与属性无关 带有关键字Static修饰的方法的重写实例 父类实例 package com.baidu.www.oop.demo05;public class B {public static void test(){System.out.println("这…

CLion 创建Qt工程

环境 CLion &#xff1a;2019.3.6 Qt &#xff1a;5.9.6&#xff08;MinGW&#xff09; Clion 配置 编译环境配置 添加Qt MinGW编译环境 添加Qt工具 创建工程 正常创建C工程 CMakeLists cmake_minimum_required(VERSION 3.8) project(QtApp)set(CMAKE_CXX_STANDARD 11)…

APB register脚本

[github repo]根据Excel表格自动生成寄存器RTL/RALF/C header的脚本 - wudayemen - 博客园 (cnblogs.com) 在芯片设计中&#xff0c;常常会使用APB总线配置每个模块的寄存器。这一部分可以使用脚本生成相应RTL代码和对应的验证所需文件比如RALF&#xff0c;和C语言的头文件&am…

【仿写tomcat】三、通过socket读取http请求信息

仿写tomcat 建立Socket连接获取连接信息查看HTTP信息 建立Socket连接 这里我们也是创建一个专门管理socket的类 package com.tomcatServer.socket;import java.io.*; import java.net.ServerSocket;/*** 套接字存储** author ez4sterben* date 2023/08/15*/ public class Soc…

电影《孤注一掷》观后感

上周看了电影《孤注一掷》&#xff0c;看完后&#xff0c;内心久久无法平静,电影影响还是听深远的的。 &#xff08;1&#xff09;情感与金钱的损失 我们每个人&#xff0c;或多或少&#xff0c;都收到过&#xff0c;诈骗类的短信或者电话&#xff0c;只要你使用的智能手机&am…

【MaxKey对接一】对接gitlab的oauth登录

MaxKey的Oauth过程 引导进入 GET http://{{maxKey_host}}/sign/authz/oauth/v20/authorize?client_idYOUR_CLIENT_ID&response_typecode&redirect_uriYOUR_REGISTERED_REDIRECT_URI 登录后回调地址 YOUR_REGISTERED_REDIRECT_URI/?code{{code}} 换取Access Token GET…

探究主成分分析方法数学原理

目录 1、简介 2、实现原理 3、实现步骤 4、公式分析 5、实例分析 6、⭐协方差矩阵补充说明 7、LaTex文本 ⭐创作不易&#xff0c;您的一键三连&#xff0c;就是支持我写作的最大动力&#xff01;&#x1f979; 关于代码如何实现&#xff0c;请看这篇文章&#xff1a;[机器…

C++ string类相关用法实例

前言&#xff1a; 1 string是表示字符串的字符串类 2 string类是basic_string模板类的一个实例&#xff0c;它使用char来实例化basic_string模板类&#xff0c;并用char_traits和allocator作为basic_string的默认参数&#xff0c;所以string在底层实际是&#xff1a;basic_str…

【漏洞修复】OpenSSH-ssh-agent 越权访问CVE-2023-38408

CVE-2023-38408漏洞升级ssh版本 漏洞说明修复步骤RPM包编译 漏洞说明 漏洞名称&#xff1a;OpenSSH-ssh-agent 存在越权访问漏洞影响范围&#xff1a;ssh-agent(-∞, 9.3-p2) openssh(-∞, 9.3p2-1)漏洞描述&#xff1a;SSH-Agent是SSH的一部分&#xff0c;它是一个用于管理私…

设计模式之享元模式(Flyweight)的C++代码实现

1、享元模式提出 面向对象很好地解决了抽象问题&#xff0c;但是创建对象会带来一定的内存开销。绝大部分情况下&#xff0c;创建对象带来的内存开销是可以忽略不计的&#xff1b;在有些情况下是需要谨慎处理的&#xff0c;如类A的sizeof是50个字节&#xff0c;则创建50*1024*…