linux进程管理

进程和线程的关系

以下介绍为linux环境

  • 进程是操作系统中一个运行中的程序,是资源分配和调度的基本单位。每个进程有自己独立的内存空间、文件描述符、堆栈等系统资源

  • 线程(Thread) 是 CPU 调度的最小单位,是进程中的一个执行流。同一进程中的多个线程可以共享资源(如全局变量、堆内存),并且线程之间通信和数据共享比进程容易。

ps命令查看进程

PS 参数说明
-a显示所有用户的进程(而不仅仅是当前用户的进程),包括没有控制终端的进程
-e查看所有进程,相当于-aux,所以有了ps -ef
-l列出更多信息,长格式输出
-t仅显示与指定终端相关的进程。示例:ps -t tty1 -auf
-u显示用户相关的进程信息,包括用户名、CPU 使用率、内存使用率、进程的启动时间
-x显示所有进程,包括没有控制终端的进程(即后台进程)
-f显示进程树(forest),以树形结构呈现进程之间的父子关系

ps -auxf查看效果图,进程直观地用树形表示出来

在这里插入图片描述

ps -ef查看所有进程

root     16855     1  0 Nov11 ?        00:00:00 nginx: master process nginx
www      16856 16855  0 Nov11 ?        00:00:02 nginx: worker process
www      16857 16855  0 Nov11 ?        00:00:00 nginx: worker process
root     20586     1  0 Aug06 ?        00:00:00 login -- root
www      21843 25724  0 Nov05 ?        00:00:15 php-fpm: pool www
root     21913     1  0 Nov04 ?        00:11:38 /usr/local/share/aliyun-assist/2.2.3.843/aliyun-service
root     21929     1  0 Nov04 ?        00:01:58 /usr/local/share/assist-daemon/assist_daemon
mysql    23055     1  0 Jun12 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql    23221 23055  0 Jun12 ?        01:55:38 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/pl
root     25724     1  0 Oct18 ?        00:01:28 php-fpm: master process (/etc/php-fpm.conf)
www      25725 25724  0 Oct18 ?        00:04:35 php-fpm: pool www
www      25726 25724  0 Oct18 ?        00:02:33 php-fpm: pool www
www      25727 25724  0 Oct18 ?        00:00:30 php-fpm: pool www
www      25728 25724  0 Oct18 ?        00:02:29 php-fpm: pool www
www      25729 25724  0 Oct18 ?        00:00:30 php-fpm: pool www
www      27261 25724  0 Oct18 ?        00:00:30 php-fpm: pool www
root     29152     1  0 Oct15 ?        00:03:36 /usr/bin/dockerd
root     29159 29152  0 Oct15 ?        00:48:20 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
www      29861 25724  0 Oct19 ?        00:02:30 php-fpm: pool www
root     31905     1  0 Jul14 ?        00:00:18 /usr/sbin/sshd -D

PPid查看父进程号

1个mysql进程,怎么找到它的父进程。可以用到PPid,首先根据进程名字找到它的pid号,再根据pid号查找它的父进程

[root@db01~]# ps -ef|grep mysql
root      10976      1  0 22:20 pts/4  
mysql     11144  10976  0 22:20 pts/4[root@db01~]# grep PPid /proc/11144/status
PPid:	10976

pstree树形化显示所有进程

pstree参数说明
-p列出pid号

在这里插入图片描述

pstree此查看一个进程的父进程比较方便

[root@centos7 ~]# pstree  -p | grep 3509|-gvfsd(2963)-+-gvfsd-burn(3509)-+-{gvfsd-burn}(3510)	#父进程是2963

进程的状态

ps 命令中的 -u 参数可以列出进程的状态

[root@centos7 ~]# ps -aux | head
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          8  0.0  0.0      0     0 ?        S    04:45   0:00 [rcu_bh]
状态说明
R(running)正在运行的进程
S已中断的进程,进程已经停止运行。可以由外部信号(如 SIGSTOP)或内部条件(如进程调用了 pause())导致。停止状态下的进程通常是暂停的,不会继续执行,直到接收到继续执行的信号(如 SIGCONT
T(terminate )进程被挂起,如Ctrl+Z把进程放到后台。ps -aux
D不可中断进程,正在读写的进程
Z僵尸进程
W (Paging)程处于等待分页操作的过程中,通常是因为内存不足,进程等待交换到磁盘。系统内存严重不足时出现

状态右边的符号含义:

字符含义示例
+前台进程S+, R+, T+
s父进程Ss, S+
l多线程进程Rl, Sl
<高优先级进程S<, R<
N低优先级进程RN, S
L锁定内存SL, RL
T停止进程T+, T
Z僵尸进程Z+, Z
W进程正在写入S+, RW

僵尸进程

在这里插入图片描述

僵尸进程介绍:

  • 僵尸进程产生:子进程结束,但是其父进程还没有回收子进程的资源

  • 僵尸进程危害:占用着系统资源,过多的僵尸进程会导致CPU、内存等占用过高。

排查僵尸进程的方式:

方式:top查找zombie进程

[root@centos7 ~]# top		#在第二行0zombie,表示没有僵尸进程
top - 13:46:06 up  1:27,  1 user,  load average: 0.02, 0.02, 0.05
Tasks: 180 total,   1 running, 179 sleeping,   0 stopped,   0 zombie

方式2:ps -aux | grep Z也可以查看

[root@centos7 ~]# ps aux | grep Z	#如果STAT为Z+就是僵尸进程
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       3739  0.0  0.0 112828   952 pts/0    Z+   14:42   0:00 grep --color=auto Z

解决zombie进程的方法

僵尸进程无法通过kill(kill -9)命令结束

  • 方法一:结束僵尸进程的主进程/父进程

  • 方法二:如果主进程为1,则重启linux系统

孤儿进程

在这里插入图片描述

  • 孤儿进程的产生:子进程的父进程挂了

  • 孤儿进程会被系统接管,仍能继续运行

kill 命令结束进程

结束进程说明
kill+pid,结束进程,常用
pkill模糊查找进程名并结束,慎用
killall精确查找进程名
kill -9强制杀死进程

让程序后台运行

  • Ctrl + Z,把后台挂起,此时进程就会处于 T 状态
  • jobs可以查看道后台挂起的进程有哪些
  • fg命令恢复为前台运行
[root@qwe~]# ping jd.com 
PING jd.com (111.13.149.108) 56(84) bytes of data.
64 bytes from 111.13.149.108 (111.13.149.108): icmp_seq=1 ttl=47 time=48.6 ms
64 bytes from 111.13.149.108 (111.13.149.108): icmp_seq=2 ttl=47 time=48.6 ms
^Z # 按一下 Ctrl + Z 
[1]+  Stopped                 ping jd.com# 可以看到 进程状态为 T ,也就是中断了
[root@qwe~]# ps -u | grep ping
root     12204  0.0  0.1 150092  2004 pts/0    T    19:22   0:00 ping jd.com
root     12224  0.0  0.0 112812   980 pts/0    S+   19:22   0:00 grep --color=auto ping# 列出了之前的ping
[root@qwe~]# jobs
[1]+  Stopped                 ping jd.com# 使用fg后,又回到前台运行了
[root@qwe~]# fg
ping jd.com
64 bytes from 111.13.149.108 (111.13.149.108): icmp_seq=3 ttl=47 time=48.3 ms
64 bytes from 111.13.149.108 (111.13.149.108): icmp_seq=4 ttl=47 time=47.9 ms
64 bytes from 111.13.149.108 (111.13.149.108): icmp_seq=5 ttl=47 time=47.9 ms

nohup命令

nohub用于运行指定的命令或脚本,并忽略挂起(SIGHUP)信号。即使关闭了终端或断开了 SSH 连接,该命令或脚本也会继续在后台运行

常用方法如:nohub java -jar app.jar &,这样即使退出了终端,程序也会在后台运行。

使用 nohub 和 & 后,ping命令持续运行,一直往文件中输出

[root@qwetmp]# nohup ping jd.com &
[1] 12543[root@qwetmp]# wc -l nohup.out 
46 nohup.out
[root@qwetmp]# wc -l nohup.out 
49 nohup.out
[root@qwetmp]# wc -l nohup.out 
50 nohup.out# 
[root@qwetmp]# ps -u | grep ping
root     12543  0.0  0.1 150092  2012 pts/0    S    19:27   0:00 ping jd.com
root     12741  0.0  0.0 112812   980 pts/0    S+   19:30   0:00 grep --color=auto ping

在命令后加上&可放到后台运行, nohup ping baidu.com -c 3 &把运行结果写入到nohub.out文件中。

screen虚拟窗口

screen命令说明
-S name1进入子shell
-ls查看 screen 号,
-r配合screen号回到screen
Ctrl + A + D平滑退出screen
  • screen会创建一个虚拟空间,只要这个空间存在,里面运行的命令就不会消失

  • 用法:输入screen命令进入一个虚拟终端,然后执行命令

  • screen可以嵌套

# 创建第1个虚拟空间,然后当前终端就会自动进入
[root@qwe~]# screen -S name1# 在第1个虚拟空间内创建第2个虚拟空间
[root@qwe~]# screen -S name2# 查看当前进程,可以看到2个 screen。当前处于第2个screen内。
[root@qwe~]# ps -auf
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     14064  1.2  0.1 116632  3036 pts/2    Ss   19:47   0:00 /bin/bash
root     14084  0.0  0.1 155448  1860 pts/2    R+   19:47   0:00  \_ ps -auf
root     14034  0.4  0.1 116632  3204 pts/1    Ss   19:47   0:00 /bin/bash
root     14061  0.7  0.0 127744  1188 pts/1    S+   19:47   0:00  \_ screen -S name2
root     13986  0.0  0.1 116604  3164 pts/0    Ss   19:47   0:00 -bash
root     14032  0.1  0.0 127744  1188 pts/0    S+   19:47   0:00  \_ screen -S name13204 pts/1    Ss   19:47   0:00 /bin/bash
root     14061  0.7  0.0 127744  1188 pts/1    S+   19:47   0:00  \_ screen -S name2
root     13986  0.0  0.1 116604  3164 pts/0    Ss   19:47   0:00 -bash
root     14032  0.1  0.0 127744  1188 pts/0    S+   19:47   0:00  \_ screen -S name1

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

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

相关文章

unity基础,点乘叉乘。

简单记录下点乘叉乘&#xff0c;要不每次用完就忘&#xff0c;忘了又查。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class TestCrossDot : MonoBehaviour {/// <summary>/// 原点/// </summary>public Transform t…

Vue2+ElementUI:用计算属性实现搜索框功能

前言&#xff1a; 本文代码使用vue2element UI。 输入框搜索的功能&#xff0c;可以在前端通过计算属性过滤实现&#xff0c;也可以调用后端写好的接口。本文介绍的是通过计算属性对表格数据实时过滤&#xff0c;后附完整代码&#xff0c;代码中提供的是死数据&#xff0c;可…

JAVA学习日记(十二)查找算法

一、基本查找、二分查找 略 二、分块查找 将数组分块&#xff0c;每一个块中最大值小于后一个块中的最小值&#xff1a;块内无序&#xff0c;块间有序。 块&#xff1a;创建一个块类 按照规则划分好块之后&#xff0c;对要查询的值设计方法进行查询。 import java.util.…

多线程小知识

一. CAS CAS (Compare and Swap, 比较并交换) 是一种无锁编程技术, 用于实现多线程环境下对共享资源的线程安全访问. CAS 的核心思想是: 只有当内存中的值与预期值相匹配时, 才会将内存中的值更新为新值. 寄存器1中存放原值, 寄存器2中存放新值. 现在要将内存中的原值更新为新…

C++基础(12.红黑树实现)

目录 红黑树的概念&#xff1a; 红黑树规则&#xff1a; 红黑树如何确保最长路径不超过最短路径的2倍的&#xff1f; 红黑树的效率&#xff1a; 红黑树的插入: 红黑树树插入⼀个值的大概过程: 情况1&#xff1a;变色 情况2&#xff1a;单旋变色&#xff1a; 情况3&…

代码随想录算法训练营第二十天|39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;带你学透回溯算法-组合总和&#xff08;对应「leetcode」力扣题目&#xff1a;39.组合总和&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩…

机器学习基础02_特征工程

目录 一、概念 二、API 三、DictVectorize字典列表特征提取 四、CountVectorize文本特征提取 五、TF-IDF文本1特征词的重要程度特征提取 六、无量纲化预处理 1、MinMaxScaler 归一化 2、StandardScaler 标准化 七、特征降维 1、特征选择 VarianceThreshold 底方差…

得物App入选诚信案例,10万正品样品库夯实高品质消费

近日&#xff0c;以“加强企业诚信建设 赋能经济社会发展”为主题的“2024年全国企业诚信建设大会”在烟台市召开。此次大会由中国企业联合会、中国企业家协会主办&#xff0c;山东省企业联合会、山东省企业家协会、烟台市企业联合会、烟台大学承办。大会期间&#xff0c;得物A…

036 RabbitMQ消息确认 死信队列 延时队列

文章目录 生产者确认模式application.propertiesMessageController.javaMessageConfirmRallback.java 生产者回退模式application.propertiesMessageConfirmRallback.javaMessageController.java 消费者手动确认application.propertiesConsumerAckQueueListener.java 死信队列延…

docker desktop运行rabittmq容器,控制台无法访问

docker desktop运行rabittmq容器&#xff0c;控制台无法访问 启动过程&#xff1a;…此处缺略&#xff0c;网上一大堆 原因 原因是在Docker上运行的RabbitMQ&#xff0c;默认情况下是没有启用管理插件和管理页面的 解决办法 使用命令 docker exec -it 容器id /bin/bash 进…

Tailwind 安装使用

Tailwind 安装使用 前言 CSS原子化——本文将详细介绍如何在Vue Vite npm环境下安装、配置并使用Tailwind CSS&#xff01; 文章目录 Tailwind 安装使用前言一、Tailwind 在 Vue Vite 项目中的安装1. 创建Vue项目2. 安装Tailwind CSS3. 初始化Tailwind配置4. 修改文件 tai…

centos7安装playwright踩坑记录

Python版本安装 Installation | Playwright Python 1. 安装pytest-playwright pip3 install pytest-playwright报错&#xff1a;提示找不到pytest-playwright 原因&#xff1a;服务器Python版本3.6.8太低&#xff0c;貌似pytest-playwright最低支持3.7 解决方法&#xff1…

函数(C语言)

1&#xff1a;函数的概念 函数的概念我们在初中的时候就已经听过了。 在C语言中也引入了函数&#xff0c;也可以叫子程序 C语言中的函数就是一个完成某项特定的任务的一小段代码 这段代码是有特殊的写法和调用方法的。其实C语言的程序也是由无数个小的函数组成的。 也就是&…

VMWare安装包及安装过程

虚拟机基本使用 检查自己是否开启虚拟化 如果虚拟化没有开启&#xff0c;需要自行开启&#xff1a;百度加上自己电脑的品牌型号&#xff0c;进入BIOS界面开启 什么是虚拟机 所谓的虚拟机&#xff0c;就是在当前计算机系统中&#xff0c;又开启了一个虚拟系统 这个虚拟系统&…

基于SVD奇异值分解的图像压缩算法(Python实现)

前言 SVD其实和PCA类似&#xff0c;就是丢入一个特征矩阵 X &#xff0c;输出另外一个特征矩阵 X′ , X′ 的维度要比原来的X 要低。并且里面的变量都是原来的变量的线性组合&#xff0c;所以含义也变得不好解释。 简单来说就是数据压缩&#xff0c;特征降维的一种技术&#…

国产AI图片工具,全部免费亲测实用!

近AI生图功能火出圈了&#xff0c;各家大厂都拿出了看家本领&#xff0c;今天就来聊聊即梦AI、通义万相、奇域AI和腾讯元宝的AI生图功能&#xff0c;看看它们各有什么特色吧&#xff01; 一、Dreamina 字节旗下的AI智能平台&#xff0c;简单实用的图片生成&#xff0c;对中国元…

C++ 二叉搜索树

二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值 它的左右…

推荐一款3D建模软件:Agisoft Metashape Pro

Agisoft Metashape Pro是一款强大的多视点三维建模设计辅助软件&#xff0c;Agisoft Metashape是一款独立的软件产品&#xff0c;可对数字图像进行摄影测量处理&#xff0c;并生成3D空间数据&#xff0c;用于GIS应用&#xff0c;文化遗产文档和视觉效果制作&#xff0c;以及间接…

IntelliJ+SpringBoot项目实战(四)--快速上手数据库开发

对于新手学习SpringBoot开发&#xff0c;可能最急迫的事情就是尽快掌握数据库的开发。目前数据库开发主要流行使用Mybatis和Mybatis Plus,不过这2个框架对于新手而言需要一定的时间掌握&#xff0c;如果快速上手数据库开发&#xff0c;可以先按照本文介绍的方式使用JdbcTemplat…

Linux高阶——1110—线程安全问题解决方法

1、同步、异步、阻塞、非阻塞 同步过程&#xff1a;发起调用&#xff0c;调用者需要等待被调用者的结果 异步过程&#xff1a;发起调用&#xff0c;无需等待被调用的结果&#xff0c;当有结果后&#xff0c;此结果传出&#xff0c;无需主动获取 阻塞和非阻塞&#xff1a;发起…