Linux系统进程

news/2024/11/30 2:33:04/文章来源:https://www.cnblogs.com/xuruizhao/p/18568958

系统进程

【1】、进程基本概述

当我们运行一个程序,那么我们将运行的程序叫进程

​ PS1:当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限

​ PS2:在进程运行的过程中,服务器上会有各种状态来表示当前进程的指标信息

程序和进程的区别

​ 程序是数据和指令的集合,是一个静态的概念,比如/bin/ls /bin/cp 等二进制文件,同时程序可以长期存在系统中

​ 进程是程序运行的过程,是一个动态的概念,进程是存在生命周期概念的,也就是说进程随着程序的终止而销毁,不会永久存在系统中

程序的生命周期

​ 一个对象从无到有、从有到无过程称为生命周期

img

当父进程接收到任务调度时,会通过fock派生子进程来处理,子进程会继承父进程衣钵(相当于完全复制了一份父进程的信息)

  1. 子进程在处理任务代码时,父进程会进入等待状态中,在一个进程中一般都是子进程去干活

  2. 子进程在处理任务代码后,会执行退出,然后唤醒父进程来回收子进程的资源

  3. 如果子进程在处理任务过程中,父进程退出,子进程没有退出,子进程没有被父进程管理,则变为僵尸进程

  4. 每个进程都有自己的PID号,子进程称为PPID

祖先进程

  1. pid=1的进程
  2. 在系统启动时,会首先启动一个祖先进程,在启动别的进程
root@xu-ubuntu:~/scripts# pstree -p
systemd(1)─┬─ModemManager(935)─┬─{ModemManager}(960)[root@kylin-xu ~]# pstree -p 
systemd(1)─┬─NetworkManager(874)─┬─{NetworkManager}(882)

【2】、监控进程状态

程序在运行后,我们需要了解进程的运行状态,查看进程的状态分为:静态和动态两种方式

1、ps命令

使用ps命令查看当前的进程状态(静态)

ps –auxf常用组合方式查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等

  • -a 显示所有终端机下执行的进程,除了阶段作业领导者之外
  • -u 以用户为主的格式来显示进程状况
  • -x 显示所有进程,不以终端机来区分
  • -f 用ASCII字符显示树状结构,表达进程间的相互关系

image-20241125150128940

标志 意义
USER 该 process 属于那个使用者账号的
PID 该 process 的号码
%CPU 该 process 使用掉的 CPU 资源百分比
%MEM 该 process 所占用的物理内存百分比
VSZ 该 process 使用掉的虚拟内存量 (Kbytes)
RSS 该 process 占用的固定的内存量 (Kbytes)
TTY 该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT 该程序目前的状态
START 该 process 被触发启动的时间
TIME 该 process 实际使用 CPU 运作的时间
COMMAND 该程序的实际指令[]内核态进程 无[] 用户进程
STAT基本状态 描述 STAT状态+符号 描述
R 进程运行 s 进程是控制进程, Ss进程的领导者,父进程
S 可中断睡眠 < 进程运行在高优先级上,S<优先级较高的进程
T 进程被暂停 N 进程运行在低优先级上,SN优先级较低的进程
D 不可中断睡眠 + 当前进程运行在前台,R+该表示进程在前台运行
Z 僵尸进程 l 进程是多线程的,Sl表示进程是以线程方式运行
案例1:
1)在终端1上运行vim
vim test
2)在终端2上运行ps命令查看状态
[root@kylin-xu ~]# ps aux | grep vim
root      434314  0.2  0.3 227272  6960 pts/1    S+   18:27   0:00 vim test.txt
3)在终端1上挂起vim命令按下: ctrl+z
4) 回到终端2再次运行ps命令查看状态
[root@kylin-xu ~]# ps aux | grep vim
root      434314  0.0  0.3 227272  6960 pts/1    T    18:27   0:00 vim test.txt
案例2
PS命令查看不可中断状态进程
使用tar打包文件时,可以通过中断不断查看状态,由S+,R+变为D+
[root@xu ~]# ps axu|grep tar|grep -v grep
root     14289  2.6  0.1 124268  1888 pts/2    S+   10:56   0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@xu ~]# ps axu|grep tar|grep -v grep
root     14289  2.7  0.2 124380  2240 pts/2    R+   10:56   0:01 tar zcf etc.tar.gz /etc/ /usr/ /var[root@xu ~]# ps axu|grep tar|grep -v grep
root     14289  2.9  0.2 124916  2724 pts/2    D+   10:56   0:01 tar zcf etc.tar.gz /etc/ /usr/ /var

2、top命令

使用top命令查看当前的进程状态 动态

任务 含义
Tasks:73 total 当前进程的总数
2 running 正在运行的进程数
71 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
%Cpu(s): 49.2 us 系统用户进程使用CPU百分比
5.7 sy 内核进程占用CPU百分比,内核是于硬件进行交互
ni 调整过优先级进程占用百分比
45.2 id 空闲CPU的百分比
0.0 wa CPU等待IO完成的时间
0.0 hi 硬中断,占的CPU百分比
0.0 si 软中断,占的CPU百分比
0.0 st 比如虚拟机占用物理CPU的时间

什么是中断?

中断就是终止当前在做的事情 去执行另一段程序

会保留现场,执行的那段程序做完之后会在回来执行刚来尚未完成的部分

image-20241125160520458

软中断和硬中断的区别

软中断 硬中断
是否有随机性 突发性
是否有中断响应周期
中断类型号的提供方法 固定或由指令提供 由中断控制器提供,硬件提供

【3】、管理进程状态

当程序运行为进程后,如果希望停止进程,怎么办呢?那么此时我们可以使用linux的kill命令对进程发送关闭新号,当然除了kill 还有killall pkill

使用kill –l列出当前系统所支持的信号

image-20241125161406952

虽然Linux信号很多,但是我们仅仅使用最常用的3个信号

1) SIGHUP 重新加载配置文件 1 不停机维护

2) SIGKILL 强制杀死进程 9 不管内存中是否有没有数据,直接杀进程,可能会丢文件,类似拔电源

3) SIGTERM 终止进程,默认kill使用该信号 15 如果内存中还有和当前进程相关的信息,将内存中的信息写入磁盘后,在杀死进程

[root@kylin-xu ~]# ps -ef | grep httpd
root      272889       1  0 06:45 ?        00:00:03 /usr/sbin/httpd -DFOREGROUND
apache    272972  272889  0 06:45 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache    272973  272889  0 06:45 ?        00:00:11 /usr/sbin/httpd -DFOREGROUND
apache    272974  272889  0 06:45 ?        00:00:12 /usr/sbin/httpd -DFOREGROUND
apache    272975  272889  0 06:45 ?        00:00:11 /usr/sbin/httpd -DFOREGROUND
[root@kylin-xu ~]# kill -9 272889
[root@kylin-xu ~]# ps aux | grep httpd
# 修改httpd端口,使用kill -1 重新加载,不停机维护
root@kylin-xu ~]# ss -tunlp | grep httpd
tcp     LISTEN   0        128                    *:80                  *:*       users:(("httpd",pid=470759,fd=4),("httpd",pid=470758,fd=4),("httpd",pid=470757,fd=4),("httpd",pid=470213,fd=4))vim /etc/httpd/conf/httpd.conf [root@kylin-xu ~]# kill -1 470213
[root@kylin-xu ~]# ss -tunlp | grep httpd
tcp     LISTEN   0        128                    *:8080                *:*       users:(("httpd",pid=471610,fd=9),("httpd",pid=471609,fd=9),("httpd",pid=471608,fd=9),("httpd",pid=470213,fd=9))

killall命令

# 可以根据进程名字杀死进程
[root@kylin-xu ~]# killall httpd
[root@kylin-xu ~]# ps -ef | grep httpd
root      474240  430910  0 19:41 pts/1    00:00:00 grep httpd

pkill命令

    使用pkill踢出从远程登录到本机的用户,终止pts1上所有进程,用户强制退出
[root@lzy ~]# pkill -9 -t pts/1

【4】、后台进程

1、临时后台进程

1) 什么是后台进程

​ 运行的进程默认在终端前台运行,一旦关闭终端,进程随着结束,此时希望进程在后台运行不退出,这样关闭终端也不影响进程的正常运行

2) 如何把程序放在后台

# 把进程放入后台运行 使用 &
[root@kylin-xu ~]# sleep 5000 &
[1] 480069
[root@kylin-xu ~]# ps aux | grep sleep
root      480069  0.0  0.0 212380   760 pts/1    S    19:54   0:00 sleep 5000
root      480151  0.0  0.0 213156   892 pts/1    R+   19:54   0:00 grep sleep# jobs查看后台进程
[root@kylin-xu ~]# jobs
[1]+  运行中               sleep 5000 &# 调回前台执行
[root@kylin-xu ~]# fg %1
sleep 5000# ctrl + c 终止# CTRL + z 后台停止,bg 进程在后台执行
[root@kylin-xu ~]# sleep 5000 
^Z
[1]+  已停止               sleep 5000
[root@kylin-xu ~]# bg %1
[1]+ sleep 5000 &

放入后台的进程,如果再终端断开连接后 ,重新连上进程会消失,我们现在不想让他消失

2、持久化后台进程

screen的使用 常用

screen的原理:开辟一个新的bash space ,将进程放入新的 bash space 中,

yum install -y screen# 开创新的 bash ---- -S  bash空间名称
[root@kylin-xu ~]# screen -S wget_install
# 进入了screen 开辟的新的bash,在新的bash中执行命令,就相当于在后台执行命令了
[root@kylin-xu ~]# sh 1.sh # ctrl +a+d 表示退出当前bash空间,放入后台,会到前台
[root@kylin-xu ~]# ps aux | grep wget
root      491586  0.0  0.1 228240  2360 ?        Ss   20:27   0:00 SCREEN -S wget_install
root      491633  1.0  0.6 227348 12832 pts/1    S+   20:27   0:01 wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm --no-check-certificate# 通过screen创建的后台进程在断开终端后也会正常执行
ctrl + d,重连终端,进程依旧存在
[root@kylin-xu ~]# ps aux | grep wget
root      491586  0.0  0.1 228240  2360 ?        Ss   20:27   0:00 SCREEN -S wget_install
--list:查看当前有哪些bash空间
[root@kylin-xu ~]# screen -list
There is a screen on:491586.wget_install     (Detached)
1 Socket in /run/screen/S-root.-r:进入指定的bash space	,可以通过进程号或bash space name
[root@kylin-xu ~]# screen -r  491586

nohup

[root@kylin-xu ~]# nohup sleep 300 &
[1] 494330

【5】、进程优先级

1) 在启动进程时,为不同的进程使用不同的调度策略

  • nice 值越高 表示优先级越低,例如+19 该进程容易将CPU使用量让给其他进程
  • nice值越低 表示优先级越高,例如-20, 改进程更不倾向于让出CPU

使用top或ps敏玲查看进程的优先级

使用top可以查看nice优先级 NI:实际nice级别,默认是0 动态修正CPU调度。范围(-20~19)。越大,cpu调度越一般,越小,cpu调度越偏向它。一般用于后台进程,调整也是往大了调,用来给前台进程让出CPU资源

PR: 优先级 显示nice值,PR默认是20,越小,优先级越高。修改nice可以同时修改PR -20映射到0, +19映射到39

image-20241125170420489

nice指定程序的优先级,语法格式nice -n 优先级数字 进程名称

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

桌面软件识别截图区域识别实例

first :1、使用pyautogui截图+拼接 2、使用lackey 截图+识别import pyautogui """整凭截图""" im1 = pyautogui.screenshot() im2 = pyautogui.screenshot(my_screenshot.png) """区域截图""" import pyautogui…

WEB攻防-XSS跨站CSP策略HttpOnly属性Filter过滤器标签闭合事件触发

1.CSP(Content Security Policy 内容安全策略) 内容安全策略是一种可信白名单机制,来限制网站中是否可以包含某来源内容。 该制度明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单, 它的实现和执行全部由浏览器完成,开发者只需提供配置。 禁止加载外域代码,防…

ThreeJs-03材质进阶

一.uv贴图 在3D计算机图形学中,UV映射是一种将2D纹理映射到3D模型表面的方法。在这里,“U”和“V”代表了2D纹理空间的坐标,这与2D笛卡尔坐标系统中的“X”和“Y”是类似的。在3D模型的每个顶点上,都会有一组对应的UV坐标,它们定义了3D模型在这个顶点上的表面应当对应纹理…

超参数调整、Batch归一化和程序框架

超参数调整、Batch归一化和程序框架 超参数调整在深度学习中,有许多超参数需要调整,不同超参数的重要性有所不同,可分为以下优先级: 第一优先级是学习率 \(\alpha\) 。 第二优先级是动量梯度下降参数 \(\beta\) ,隐藏层神经元数量,以及mini-batch大小。 第三个优先级是隐…

数据采集与融合技术实践作业4

102202143 梁锦盛 1.东方财富网信息爬取 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 一、作业代码与展示 1.编写代码文件 from selenium import webdriver from selenium.webdriver.common.by import By …

工程管理如何优化?2024年8款进度管理系统分享

本文盘点了8款主流工程项目管理工具:1.Worktile;2.泛普软件;3.子筑云;4.蓝凌;5.智建云;6.Wrike;7.Smartsheet;8.用友U8。工程进度管理系统是确保工程项目按计划顺利进行的关键工具。这类系统通过提供任务调度、资源分配、进度跟踪和实时通讯等功能,帮助项目经理和团队…

Docling:一个用于文档解析和格式转换的 IBM 开源工具

日常接触到的文档格式越发的多,pdf、doc、ppt、html等等,有没有一种方式可以将其转化为统一的格式呢?比如转为markdown或者json格式。 今天推荐一个IBM开源的工具,它可以满足你的需求,它是用python开发的。 下面为具体介绍内容: 项目简介 Docling是一个用于文档解析和格式…

Vulnhub Tr0ll

0x01:端口扫描 主机发现 nmap -sn 192.168.231.0/24IP地址为192.168.231.137 全端口扫描 nmap --min-rate 10000 -p- 192.168.231.137开放了21ftp,22ssh,80http UDP扫描 nmap -sU --min-rate 10000 -p- 192.168.231.137无UDP端口开放 接下来进行详细端口扫描 nmap -sT -sC -…

裁员了,很严重,大家做好准备吧!

在实际工作中,测试人需要解决的是具体的技术问题,而不仅仅是理论知识。为了全面评估候选人的能力,确保招聘到真正适合公司的人才。📝 博主首页 : 「码上生花」 ,同名公众号 :「伤心的辣条」📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MyS…

IDEA如何快速地重写方法,如equals、toString等

前言 大家好,我是小徐啊。我们在使用IDEA的时候,有时候是需要重写equals和toString等方法的。这在IDEA中已经很方便的给我们准备好了快速的操作了。今天就来讲解一下。 如何重写 首先,打开要重写方法的文件,让鼠标定位到这个文件。然后,点击上方的代码,再点击重写方法这个…

高级语言程序设计课程第九次个人作业

班级:https://edu.cnblogs.com/campus/fzu/2024C 作业要求:https://edu.cnblogs.com/campus/fzu/2024C/homework/13311 学号:102400203 姓名:黄奕 14.17 3.这里定义月份名和其缩写时忘记定义长度,在第五问的时候系统报错才发现,更改在第五问float类型对应%f,我对应成%lf…

分布式一致性算法Raft

Raft算法在了解Raft之前,我们先了解一致性(Consensus)这个概念,它是指多个服务器在状态达成一致,但是在一个分布式系统中,因为各种意外可能,有的服务器可能会崩溃或变得不可靠,它就不能和其他服务器达成一致状态。这样就需要一种Consensus协议,一致性协议是为了确保容…