【linux 多进程并发】linux下使用常见命令,来解析进程家族体系脉络

news2024/9/27 21:22:50

0101 Linux进程

专栏内容

  • postgresql使用入门基础
  • 手写数据库toadb
  • 并发编程

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

文章目录

  • 0101 Linux进程
  • 一、概述
  • 二、进程家族
  • 三、进程的查看方法
    • 3.1 `ps` 命令
    • 3.2 `top` 命令
    • 3.3 `kill` 命令
  • 四、总结
  • 结尾

一、概述


在多任务并发编程中,进程是一个非常重要的概念,在应用程序运行时,都是以进程的方式启动,再展开为多进程或多线程的架构。

涉及到系统编程,每个操作系统平台实现存在差异,这里以linux操作系统为例。

在Linux操作系统中,进程是程序的一个实例化(也就是运行起来后),是系统进行资源分配和调度的基本单位。

每个进程是独立的占有资源,会被分配独立的内存空间,CPU核,文件描述符等。

进程之间通过进程间通信(IPC)机制进行通信和同步,当然这里是与线程有区别。

多进程编程就是在同一程序中创建并运行多个进程,以实现并发处理。

本节就来总体介绍一下linux下的进程相关知识,后续会对每个点进行详细介绍。

二、进程家族


在linux操作系统中,所有进程之间都存在继承关系,可以说是一个大家族。

在这里插入图片描述

在操作系统启动时,创建PID为0的idle进程,它是进程家族的祖先。

之后又会创建两个进程:

  • systemd,用户进程祖先,最新的linux系统采用systemd,而之前版本会用init,它的PID为1;
  • kthreadd, 内核进程的祖先,kthreadd,也就是kernal thread deamon的缩写,它的PID为2;

对于用户应用程序,启动时它的父进程的PID一般就是1,有些没有认领的僵尸进程,也会被1号进程接管。
而内核进程启动时,它都是从2号进程继承下来。

三、进程的查看方法


在Linux操作系统运行时,实际上已经有很多服务在运行,每个服务会有一个或多个进程,我们可以通过系统自带的命令进行查看。

这里简要介绍最常用的三个命令:

3.1 ps 命令

ps命令是最常用的查看进程的命令,支持BSD,Unix,GUN三种风格的参数输入,下面以Unix格式为主进行介绍。

常用的几个参数介绍如下:

控制显示格式

参数含义
-j使用job格式显示
-fASCII码形式显示进程关系

显示内容控制

参数含义
-e在命令后面显示环境变量信息
-H显示进程关系图
-T显示线程信息,增加SPID列来显示线程ID

演示

  • 查看所有进程信息, 带 -ef 参数;
[senllang@hatch src]$ ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0  2023 ?        00:37:55 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
root           2       0  0  2023 ?        00:00:32 [kthreadd]
root           3       2  0  2023 ?        00:00:00 [rcu_gp]
root           4       2  0  2023 ?        00:00:00 [rcu_par_gp]
root           5       2  0  2023 ?        00:00:00 [slub_flushwq]
root           7       2  0  2023 ?        00:00:00 [kworker/0:0H-events_highpri]
root          10       2  0  2023 ?        00:00:00 [mm_percpu_wq]

列出当前系统中的所有进程信息,默认以PID列进行了排序,内容非常多。

可以看到前面介绍的进程1 systemd和进程2 kthreadd,之后的进程都是以这两个进程为父进程。

  • 带过滤条件查看
[senllang@hatch src]$ ps -ef|grep toadb
senllang 1463947       1 99 Sep02 pts/19   46-21:21:45 ./toadb-0-01 -M 2
senllang 2481379  147895  0 09:03 pts/17   00:00:00 ./tools/tbench/toadbench 1 63
senllang 2481538 4129438  0 09:04 pts/7    00:00:00 grep --color=auto toadb

大多数时候,我们不需要这么多的内容,可以使用grep进行信息的过滤,带上自己信息的关键字。

但是列表中,会多出一行grep进程的信息,一般再对它进行取反过滤 grep -v grep

[senllang@hatch src]$ ps -ef|grep toadb |grep -v grep
senllang 1463947       1 99 Sep02 pts/19   46-21:21:45 ./toadb-0-01 -M 2
senllang 2481379  147895  0 09:03 pts/17   00:00:00 ./tools/tbench/toadbench 1 63

这样就不会有多余的信息。

3.2 top 命令

top命令常用于查看进程占用资源的信息,比如CPU占用率,内存的占用率;

当然也可以进行实时观察进程状态的变化。

惯常用法就很简单,直接执行就可以。

[senllang@hatch src]$ top

Tasks: 666 total,   1 running, 659 sleeping,   3 stopped,   2 zombie
%Cpu(s):  5.7 us, 13.0 sy,  0.0 ni, 79.3 id,  0.0 wa,  0.0 hi,  1.9 si,  0.0 st
MiB Mem :  31672.7 total,   6838.9 free,  13261.2 used,  11572.6 buff/cache
MiB Swap:   1020.0 total,      0.0 free,   1020.0 used.  16038.6 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1463947 senllang  20   0 1875124   1.1g   1644 S 193.8   3.5  70139:19 toadb-0-01
2717739 senllang  20   0   55036   5036   3580 R   6.2   0.0   0:00.01 top
      1 root      20   0  251316  11140   4696 S   0.0   0.0  37:55.49 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:32.56 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
      5 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 slub_flushwq
      7 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri
     10 root       0 -20       0      0      0 I   0.0   0.0   0:00.01 mm_percpu_wq
     11 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_rude_
     12 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_trace
     13 root      20   0       0      0      0 S   0.0   0.0   7:51.90 ksoftirqd/0
     14 root      20   0       0      0      0 I   0.0   0.0  83:02.09 rcu_sched
     15 root      rt   0       0      0      0 S   0.0   0.0   0:15.83 migration/0
     16 root      rt   0       0      0      0 S   0.0   0.0   0:07.44 watchdog/0
     17 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0
     18 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/1
     19 root      rt   0       0      0      0 S   0.0   0.0   0:16.97 watchdog/1

退出时,按q键即可。

在命令执行后,会不断刷新信息,默认按%CPUCPU占用率列进行排序,

顶部显示概要信息,总的任务数,CPU总体使用情况,内存总体占用;下半部分详细列出各进程的使用情况。

在命令运行界面,只能通过键盘进行控制,h键是帮助信息。

3.3 kill 命令

kill 命令用于给指定进程传递信号或一些值;常用的就是给进程传递 SIGKILL(9),强制结束进程。

我们先来后台启动一个top进程

[senllang@hatch src]$ top &
[1] 2726248
```shel

查看top进程的PID,然后使用kill命令给进程PID=2726248发送SIGKILL信号;

```shel
[senllang@hatch src]$ ps -ef|grep top |grep -v grep
zpzhao    609215  457332  0  2023 ?        00:26:31 /usr/libexec/xdg-desktop-portal
zpzhao    609229  457332  0  2023 ?        08:04:39 /usr/libexec/xdg-desktop-portal-gtk
root     1343614 1339665  0  2023 ?        00:03:28 /usr/libexec/xdg-desktop-portal
root     1343648 1339665  0  2023 ?        00:00:03 /usr/libexec/xdg-desktop-portal-gtk
senllang 2726248 2708534  0 11:13 pts/8    00:00:00 top

[senllang@hatch src]$ kill -9 2726248

再次查看时,系统提示已经被kill掉了。

[senllang@hatch src]$ ps -ef|grep top |grep -v grep
zpzhao    609215  457332  0  2023 ?        00:26:31 /usr/libexec/xdg-desktop-portal
zpzhao    609229  457332  0  2023 ?        08:04:39 /usr/libexec/xdg-desktop-portal-gtk
root     1343614 1339665  0  2023 ?        00:03:28 /usr/libexec/xdg-desktop-portal
root     1343648 1339665  0  2023 ?        00:00:03 /usr/libexec/xdg-desktop-portal-gtk
[1]+  Killed                  top

这里的信号,可以用数字,也可以用信号的名称,下面列出了信号的定义。

      Signal     Value     Action   Comment
    ──────────────────────────────────────────────────────────────────────
       SIGHUP        1       Term    Hangup detected on controlling terminal
                                     or death of controlling process
       SIGINT        2       Term    Interrupt from keyboard
       SIGQUIT       3       Core    Quit from keyboard
       SIGILL        4       Core    Illegal Instruction
       SIGABRT       6       Core    Abort signal from abort(3)
       SIGFPE        8       Core    Floating-point exception
       SIGKILL       9       Term    Kill signal
       SIGSEGV      11       Core    Invalid memory reference
       SIGPIPE      13       Term    Broken pipe: write to pipe with no
                                     readers; see pipe(7)
       SIGALRM      14       Term    Timer signal from alarm(2)
       SIGTERM      15       Term    Termination signal
       SIGUSR1   30,10,16    Term    User-defined signal 1
       SIGUSR2   31,12,17    Term    User-defined signal 2
       SIGCHLD   20,17,18    Ign     Child stopped or terminated
       SIGCONT   19,18,25    Cont    Continue if stopped
       SIGSTOP   17,19,23    Stop    Stop process
       SIGTSTP   18,20,24    Stop    Stop typed at terminal
       SIGTTIN   21,21,26    Stop    Terminal input for background process
       SIGTTOU   22,22,27    Stop    Terminal output for background process

四、总结


本文介绍了Linux系统平台下进程的相关概念,在Linux下所有进程是有继承关系的,最初的1号和2号进程分别是用户进程和内核进程的祖先,通过 ps,top,kill三个常用的命令,就可以查看进程信息,资源占用情况,以及结束进程。

结尾


非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!

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

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

相关文章

ASP.NET Core 打包net8.0框架在Linux CentOS7上部署问题

问题1 libstdc.so.6版本过低。 CentOS7默认安装的gcc版本太低,达不到.net8的启动条件。 /lib64/libstdc.so.6: version GLIBCXX_3.4.20’ not found (required by ./IDT_net) /lib64/libstdc.so.6: version GLIBCXX_3.4.21’ not found (required by ./IDT_net) 解…

恢复丢失的数据:恢复数据库网络解决方案

探索恢复数据库网络的深度对于了解现代企业如何防御其数据不断增长的威胁至关重要。在一个时代,数字证据和取证网络安全在法律和商业领域扮演关键角色,这些网络提供的弹性是不可或缺的。深入研究恢复数据库网络的重要性不仅仅是数据保护,它还…

ubuntu安装mysql 8,mysql密码的修改

目录 1.安装mysql 82.查看当前状态3.手动给数据库设置密码mysql5mysql8 4.直接把数据库验证密码的功能关闭掉 1.安装mysql 8 apt install mysql-server-8.0敲 Y 按回车 table 选ok 2.查看当前状态 service mysql status显示active(running)证明安装成…

媒界:吉利星瑞百炼成钢,持续引领中国汽车价值向上

秋风送爽绘秋色,出行良辰恰逢时。9月28日至9月29日,2024安行中国汽车安全科技公益巡展迎来尾声,安行中国携手吉利汽车,步履轻盈地踏入苏州星湖天街,共同呈献一场融合环保科技前沿、安全驾驶理念与深厚文化底蕴的48小时…

使用jQuery处理Ajax

使用jQuery处理Ajax HTTP协议 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法 所有的WWW文件都必须遵守这个标准 一次HTTP操作称为一个事务&am…

如何使用 CCF Communicator 框架快速开发设备接口

什么是 CCF Communicator Framework? 通信器框架通过封装 CCF 和设备之间的连接,简化了硬件之间的低级消息处理。 举例来说,考虑一下控制软件和硬件设备之间的连接方式。ASCII 串行连接需要使用 TCP 的套接字连接、用于处理设备发送/接收的…

肺癌类器官培养研究概述

前 言 2023年是类器官被《Science》杂志评为年度十大技术的10周年。10年后类器官技术发展迅猛,犹如一颗璀璨的明珠,不断的为生命科学研究揭示新的奥秘,推动生物医学领域不断前行。肺类器官培养条件也在不断完善,在基础和临床研究…

MySQL面试知识汇总

学习链接 创建索引有哪些注意点? 索引应该建在查询频繁的字段,比如where查询、order排序索引的个数应该适量(最多64个),索引需要占用空间,更新时也需要维护区分度低的字段,例如性别&#xff0c…

声阔头戴式耳机怎么样?西圣、jBL、声阔头戴式耳机终极pk测评推荐

我们深知,一款优秀的头戴式耳机,不仅仅是音乐的传递者,更是用户情感与个性的延伸。因此,在设计之初,便将极致的佩戴舒适度视为核心追求,通过人体工学的精准设计与优质材料的精心挑选,力求让每一…

Linux 配置与管理 SWAP(虚拟内存)

Linux 配置与管理 SWAP(虚拟内存) 一、作用二、创建交换文件(以创建一个2GB的交换文件为例)1. 创建交换文件2. 设置文件权限2.1. **关于 sudo chmod 600 /root/swapfile 是否一定要执行**2.2. **关于其他用户启动是否没权限用到交换分区** 3.…

大数据电商数仓项目--实战(一)数据准备

第一章 数仓分层 1.1 为什么要分层 1.2 数仓命名规范 1.2.1 表命名 ODS层命名为ods_表名DIM层命名为dim_表名DWD层命名为dwd_表名DWS层命名为dws_表名DWT层命名为dwt_表名ADS层命名为ads_表名临时表命名为tmp_表名 1.2.2 表字段类型 数量类型为bigint金额类型为decimal(16…

猫咪独自在家可以吗?希喂、美的、有哈宠物空气净化器哪款好?

这不是快要国庆了吗,本来计划去旅游的,结果我妈让我假期回家。收拾行李已经很烦了,行李箱旁的猫咪更是让我头疼。我妈因为之前浮毛过敏的事情,禁止我把猫咪再带回家,朋友们也各有计划,甚至连上门喂养都约满…

设备管理与点巡检系统

在现代企业管理中,设备的高效运作至关重要。为此,我们推出了设备管理与点巡检系统,通过自动化管理提升设备使用效率,保障生产安全。 系统特点 设备全生命周期管理 系统涵盖设备的各个阶段,从设备管理、点检、巡检、保…

计算曲线5s1-2的斜率

在行列可自由变换的条件下,平面上的5点结构只有34个 这次将5点结构通过结构加法化成2点结构5s1-4-3-2,并比较5s1-4-3-2的变化规律。 (A,B)---6*n*2---(0,1)(1,0) 分类A和B,A是34个5点结构,让B全是0。当收敛误差为7e-4&#xff0…

Netty源码解析-响应式实现(Reactor模式)

Netty基本介绍,参考 Netty与网络编程 1、Netty如何支持Reactor模式 1.1 主从Reactor模式 实现这种模式需要定义两个EventLoopGroup,bossGroup就是mainReactor, workerGroup就是subReactor, 接着我们进入下图的b.group方法 1.…

Tomcat部署及其优化

目录 一、Tomcat概述 二、Tomcat的组成 三、Tomcat请求过程 四、Tomcat服务部署 五、/usr/local/tomcat/目录下的主要目录说明 六、Tomcat虚拟主机配置 七、Tomcat优化 1.Tomcat配置文件参数优化 2.Tomcat JVM优化 一、Tomcat概述 Tomcat是基于java语言开发&#xff0c…

传知代码-轻量注意力网络实现苹果叶片识别

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 引言 该系统基于EfficientNet与多头自注意力机制,构建了一个高效、精准的苹果叶片识别模型,能够对不同种类的苹果叶片进行准确分类。通过结合EfficientNet的强大特征提取能力和多头注意力…

Ks渲染做汽车动画吗?汽车本地渲染与云渲染成本分析

Keyshot是一款强大的实时光线追踪和全域光渲染软件,它确实可以用于制作汽车动画,包括汽车模型的渲染和动画展示。Keyshot的动画功能允许用户创建相机移动、物体变化等动态效果,非常适合用于汽车动画的制作。 至于汽车动画的渲染成本&#xff…

Power Platform开发小技巧,一天一个APP, 如何快速搭建二维码识别器

之前,给大家分享了微软Power Platform开发课程——手把手教你搭建二维码生成器,很多小伙伴反馈真好用。这期我们继续为大家分享Power Platform的开发能力与技巧。 今天介绍如何开发⼀个⼆维码识别器。 该应用包含如下功能: 1.⼆维码图片的…

尾矿库安全监测系统:守护矿山安全的关键技术

尾矿库是矿山企业用于存放尾矿的重要设施,其安全状况直接关系到周边环境和人民生命财产安全。近年来,随着技术的不断进步,尾矿库安全监测系统应运而生,为尾矿库的安全管理提供了强有力的技术支持。本文将详细介绍尾矿库安全监测系…