【Linux】进程探秘

这篇具有很好参考价值的文章主要介绍了【Linux】进程探秘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Linux】进程探秘,Linux入门到精通,linux,服务器,运维
【Linux】进程探秘,Linux入门到精通,linux,服务器,运维

🎉博客主页:小智_x0___0x_

🎉欢迎关注:👍点赞🙌收藏✍️留言

🎉系列专栏:Linux入门到精通

🎉代码仓库:小智的代码仓库


一、什么是进程?

一个程序想要运行,就必须加载到内存中,那么我们把一个已经加载到内存中的程序,叫做进程!(也可以叫做任务)
我们在Windows操作系统下,可以通过任务管理器来查看进程Ctrl+Shift+Esc:
【Linux】进程探秘,Linux入门到精通,linux,服务器,运维
在Linux下,我们可以通过下面指令进行查看进程:

ps axj
#或者
top

上面这两个指令都可以用来查看进程>
【Linux】进程探秘,Linux入门到精通,linux,服务器,运维

1.1写一个进程

我们来写一个C语言程序,通过编译来形成可执行程序。

#include <stdio.h>
#include <unistd.h>

int main()
{
    while(1)
    {
        printf("我是一个进程\n");
        sleep(1);
    }
    return 0;
}

编译之后形成可执行程序myprocess:
【Linux】进程探秘,Linux入门到精通,linux,服务器,运维
此时这个myrocess是一个可执行程序,在我们冯诺依曼体系结构来看,这个文件目前存放在磁盘中,属于外设,我们可以通过./myprocess来将这个可执行程序加载到内存中,加载完成运行起来之后它就会变成一个进程。

ps axj | grep myprocess
#ps axj查看所有进程通过管道传给grep来过滤出含有myprocess的进程

【Linux】进程探秘,Linux入门到精通,linux,服务器,运维

ps axj| head -1 && ps axj | grep myprocess
#ps axj使用管道传递给head将表头属性打印出来
# ps axj查看所有进程通过管道传给grep来过滤出含有myprocess的进程
# 两个通过&&链接起来

【Linux】进程探秘,Linux入门到精通,linux,服务器,运维

我们平时写的代码,编译成可执行程序之后都是通过CPU来运行的,CPU想要拿到这些数据只能通过内存来获取,所以可执行程序先要加载到内存中,我们日常开机的时候就是将操作系统从磁盘中加载到内存,再通过CPU来运行。
我们再来画图理解一下一个可执行程序变成进程的过成>
【Linux】进程探秘,Linux入门到精通,linux,服务器,运维
一个操作系统,不仅仅只能运行一个进程,可以同时运行多个进程。操作系统必须将进程管理起来!

二、操作系统是如何管理的进程的呢?

通过上篇操作系统是如何进行管理的我们可以知道,操作系统想要管理就必须还是这6个字>先描述,再组织!!!
操作系统先定义一个进程结构体struct里面包含了进程的各种属性,一个对象表示一个进程,再使用结构体指针将这些对象组织起来,这样就能完成对进程的管理,其实就是对链表数据的增删查改!

2.1描述进程-PCB

在计算机中,进程是由一个或多个线程执行的计算机程序实例。它包含程序代码和当前活动。进程由操作系统内核管理,为每个进程创建和维护一个称为进程控制块(PCB)的数据结构。PCB 包含有关进程的信息,例如其进程 ID、状态、优先级、内存使用情况、指针信息和其他相关细节。操作系统使用此信息来高效地管理和调度进程。
课本上称之为PCB(process control block),

2.2组织进程

操作系统将所有PCB对象通过链表组织起来存储在内核里,将对进程的管理,变成了对PCB单链表的管理。
【Linux】进程探秘,Linux入门到精通,linux,服务器,运维

三、Linux下是怎么做的?

Linux操作系统下的PCB是: task_struct.

3.1task_struct-PCB的一种

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

3.2task_ struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息

3.3linux中组织进程

Linux内核中最基本的组织进程task_struct的方式,采用的是双链表组织的,在Linux中,PCB不仅仅在双链表中,还存在于内核用于管理进程的其他数据结构中。例如,每个进程都有一个称为进程ID(PID)的唯一标识符,存储在PCB中,并由内核用于识别和管理进程。 PCB还包含有关进程状态、优先级、内存使用情况和其他相关细节的信息。

3.4查看进程的相关属性

进程的信息可以通过 /proc 系统文件夹查看
【Linux】进程探秘,Linux入门到精通,linux,服务器,运维
proc 是 Linux 系统下的一个目录,关机后,目录里面的信息全都没了,开机的时候操作系统会帮我们创建对应的目录和文件。proc 目录下的所有信息都是 Linux 操作系统用文件系统的方式把内存中的文件包括进程信息给我们展现出来,其中蓝色的数字表示一个目录,该数字就是进程的唯一标识 PID。该目录里面保存了进程的所有属性。

  • 如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹。
    【Linux】进程探秘,Linux入门到精通,linux,服务器,运维
    大多数进程信息同样可以使用 top和ps这些用户工具来获取。
    比如我们的myprocess进程:
    【Linux】进程探秘,Linux入门到精通,linux,服务器,运维
    这里我们发现除了./myprocess进程,这里还有一个grep -- color=auto myprocess的进程,这是因为我们在使用grep过滤内容的时候,首先先要将grep加载入内存中运行,成为一个进程被CPU调度才能进行过滤,而这个进程名中也包含了myprocess所以最终过滤会出现两个进程。我们也可以通过-v选项来去除掉包含grep的进程。
head -1 && ps axj | grep myprocess |grep -v grep

【Linux】进程探秘,Linux入门到精通,linux,服务器,运维
我们再来查看一下myprocess这个进程在/proc目录下的内容
【Linux】进程探秘,Linux入门到精通,linux,服务器,运维在一个进程中,当前工作目录(cwd)是进程当前正在执行的目录。它是进程的一个属性。比如我们使用touch创建一个文件,在只写文件名的情况下,touch这个进程就会默认在当前目录下查找文件或者将创建的文件放在当前目录下。exe 是一个链接文件,它就指向当前进程所对应的可执行程序的路径。
我们来举个例子:
【Linux】进程探秘,Linux入门到精通,linux,服务器,运维
重新编译跑起来之后我们可以看到在当前目录下创建了一个log.txt
【Linux】进程探秘,Linux入门到精通,linux,服务器,运维
我们没在程序中写我们的当前目录,程序确能在我们的根目录下创建文件,是因为程序执行时,会将cwd中的目录拼接在log.txt之前fopen("cwd/log.txt","w");

🍀小结🍀

今天我们学习了"Linux进程探秘"相信大家看完有一定的收获。种一棵树的最好时间是十年前,其次是现在! 把握好当下,合理利用时间努力奋斗,相信大家一定会实现自己的目标!加油!创作不易,辛苦各位小伙伴们动动小手,三连一波💕💕~~~,本文中也有不足之处,欢迎各位随时私信点评指正!
【Linux】进程探秘,Linux入门到精通,linux,服务器,运维文章来源地址https://www.toymoban.com/news/detail-713520.html

到了这里,关于【Linux】进程探秘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Linux服务器中查看进程的四种方法

    1. 使用 ps aux 命令来查看,能以简单列表的形式显示出进程信息 ps aux 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序. ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进

    2024年02月02日
    浏览(17)
  • Linux网络编程:多进程 多线程_并发服务器

    文章目录: 一:wrap常用函数封装 wrap.h  wrap.c server.c封装实现 client.c封装实现 二:多进程process并发服务器 server.c服务器 实现思路 代码逻辑  client.c客户端 三:多线程thread并发服务器 server.c服务器 实现思路 代码逻辑  client.c客户端 ​​​​   read 函数的返回值 wrap.h  wrap

    2024年02月12日
    浏览(25)
  • 蓝易云:Linux系统sshd命令 – openssh服务器守护进程

    sshd是Linux系统中的一个守护进程,它提供了远程登录服务和安全的文件传输功能。以下是sshd的详细教程。 1. 安装openssh-server 在Debian/Ubuntu上安装openssh-server命令如下: sudo apt-get update sudo apt-get install openssh-server 在CentOS/RHEL上安装openssh-server命令如下: sudo yum update sudo yum install

    2024年02月16日
    浏览(15)
  • 基于linux下的高并发服务器开发(第二章)- 2.7 进程退出、孤儿进程、僵尸进程

    基于linux下的高并发服务器开发(第二章)- 2.7 进程退出、孤儿进程、僵尸进程

    ◼ 父进程运行结束,但子进程还在运行(未运行结束),这样的子进程就称为孤儿进程 (Orphan Process)。 ◼ 每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init ,而 init 进程会循环地 wait() 它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束 了其生

    2024年02月16日
    浏览(14)
  • Linux高并发服务器开发---笔记1(环境搭建、系统编程、多进程)

    Linux高并发服务器开发---笔记1(环境搭建、系统编程、多进程)

    0613 首先这整个系列笔记属于笔记①:牛客校招冲刺集训营—C++工程师中的 第四章 笔记。 视频课链接: 视频1:Linux高并发服务器开发(40h); 视频2:第4章 项目制作与技能提升(录播)(26h30min); 视频课3: 第5章 高频考点与真题精讲(录播)中的 5.10-5.13 项目回顾 有个学

    2024年02月15日
    浏览(60)
  • linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解

    linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解

    1.1 使用查看端口号对应的进程信息 方式一 : 使用netstat命令 -t:显示TCP连接 -u:显示UDP连接 -l:仅显示监听状态的连接 -n:以数字形式显示端口号,而不是以服务名称显示 通过管道符号|将netstat的输出结果传递给grep命令,用于过滤出包含指定端口号的行。 执行命令后,终端

    2024年02月04日
    浏览(19)
  • Linux中 socket编程中多进程/多线程TCP并发服务器模型

    一次只能处理一个客户端的请求,等这个客户端退出后,才能处理下一个客户端。 缺点:循环服务器所处理的客户端不能有耗时操作。 模型 源码 可以同时处理多个客户端请求 父进程 / 主线程专门用于负责连接,创建子进程 / 分支线程用来与客户端交互。 模型 源码 模型 源

    2024年02月12日
    浏览(14)
  • Linux 常用操作命令(CentOS 7.0)- 故障定位:服务器负载、进程管理、日志分析

    系统经研发测试上线后,如果运行期间出现了BUG,需要对服务故障进行定位,一般会查看服务器负载、服务状态、进程管理、服务日志等。 本文以CentOS 7.0 操作系统上的命令操作作为示例进行记录。 #服务器负载 完整参见:http://www.laobingbiji.com/note/detail.html?note_id=20231115154337

    2024年01月17日
    浏览(49)
  • 【Linux入门篇】服务器优化

    【Linux入门篇】服务器优化

      目录 🍁selinux优化 🍁系统主机名优化 🍁命令提示符优化 🍁系统时间同步优化 🍁系统字符编码优化 🍁系统远程连接优化 🍁系统资源限制优化 🍁系统内核优化 🍁系统内核版本升级 🦐博客主页:大虾好吃吗的博客 🦐专栏地址:Linux从入门到精通         作为系统管

    2023年04月18日
    浏览(9)
  • [Linux] 网络编程 - 初见TCP套接字编程: 实现简单的单进程、多进程、多线程、线程池tcp服务器

    [Linux] 网络编程 - 初见TCP套接字编程: 实现简单的单进程、多进程、多线程、线程池tcp服务器

    网络的上一篇文章, 我们介绍了网络变成的一些重要的概念, 以及 UDP套接字的编程演示. 还实现了一个简单更简陋的UDP公共聊天室. [Linux] 网络编程 - 初见UDP套接字编程: 网络编程部分相关概念、TCP、UDP协议基本特点、网络字节序、socket接口使用、简单的UDP网络及聊天室实现…

    2024年02月16日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包