写点什么

linux 进程管理

  • 2024-07-10
    福建
  • 本文字数:3365 字

    阅读完需:约 11 分钟

Linux 进程管理


  • 什么是程序:应用程序是用户选择安装的程序的总称,通常包括驱动程序的进程,看图软件、解压缩软件等通用软件的进程.也可以顾名思义地说:应用程序就是为使用者提供与电脑沟通所开发出来的程序软件

  • 什么是进程:

    狭义定义:进程就是一段程序的执行过程。 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

  • 什么是线程:也叫做轻量级进程,线程是进程中的⼀个执⾏单元,负责当前进程中程序的执⾏,⼀个进程中⾄少有⼀个线程。⼀个进程中是可以有多个线程的,这个应⽤程序也可以称之为多线程程序。


【1】、查看进程树


  • pstree:以树状结构显示进程信息,包括进程之间的关系

  • option

    -p:显示进程 PID

    -a:显示完整的命令行

    -u:列出每个进程所属账号名称

    可以查看每一个进程是由哪些账号开启的,进程要一直开启才可以看到,进程有生命周期



通过 pstree 命令可以去进行进程的查询。

可以通过用户查询

pstree -p 用户名


  • ps aux :unix 格式静态查看系统进程,查看系统所有进程信息

    a:显示当前终端所有进程

    u:以用户格式输出

    x:当前用户在所有终端下的进程

[root@bogon ~]# ps auxUSER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot           1  0.1  0.3 241428 14348 ?        Ss   04:21   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
复制代码


  • 各个字段的含义

USER:进程属于哪个用户PID:进程ID号%CPU:该进程占用CPU的百分比%MEN:该进程占用物理内存的百分比VSZ:进程使用掉的虚拟内存量(单位:kb)TTY:表示进程在那个终端运行,如果内核直接调用则显示“?”,tty1-tty6表示本机终端登录的用户进程,pts/0-255则表示远程终端登录用户的进程STAT:进程状态,R(running)运行,S(sleep)睡眠,s包含子进程,T(stop)停止,Z(zombie)僵尸进程, +后台进程START:进程启动时间TIME:占用CPU运算时间COMMAND:产生此进程的命令
复制代码


ps ef :unix 格式静态查看系统进程,查看系统所有进程信息

  • -e:显示当前终端所有进程

  • -f:显示最完整的进程信息

  • -l:以长格式输出

  • 查找僵尸进程

[root@bogon ~]# ps -e -o ppid,stat | grep Z
复制代码


【2】、top 命令

Tasks: 256 total,   1 running, 255 sleeping,   0 stopped,   0 zombie		进程总数	正在运行的进程  休眠进程数		停止进程数		僵尸进程数
复制代码


第一行:

系统本地时间

系统运行时间

用几个用户在登录

负载情况



  • -M:按照内存使用资源排序

  • -P:按照 CPU 使用资源排序


【3】、进程的前后台调度


  • 前台任务

    会持续占据终端界面,直至任务的结束才会释放终端界面,在前台任务占据终端界面时,我们是不能进行任何操作的

  • 后台任务

    在后台运行的任务不会占据控制界面,我们可以执行其他的命令

  • &:将程序 fangruhoutaiyunx

  • jobs -l:查看后台任务列表

  • fg 进程编号:将后台任务恢复到前台执行

  • CTRL+Z:挂起前台任务并且放入后台

  • bg 进程编号:激活后台被挂起的进程

[root@bogon ~]# ping baidu.com >> /dev/null &[1] 3230#将进程放入后台执行[root@bogon ~]# jobs -l[1]+  3230 Running                 ping baidu.com >> /dev/null &#查看后台进程[root@bogon ~]# fg 1ping baidu.com >> /dev/null#将后台进程放入前台执行^Z#挂起前台任务,并放入后台[1]+  Stopped                 ping baidu.com >> /dev/null[root@bogon ~]# bg 1#激活[1]+ ping baidu.com >> /dev/null &[root@bogon ~]# jobs -l[1]+  3230 Running                 ping baidu.com >> /dev/null &
复制代码


4】、杀死进程


  • CTRL+C:结束当前命令程序,只能杀死前台任务,后台任务没法杀

  • kill

    按照 PID 杀死,精确的杀死一个进程

    -l:列出可选择的信号

    常用信号:

    -1:重启

    -9:强制杀死,直接杀死,例如杀死僵尸进程

    -15:正常杀死,默认是-15,杀死进程时先终止,后杀死

[root@bogon logs]# jobs -l[1]   3628 Running                 sleep 2m &[2]-  3629 Running                 sleep 3m &[3]+  3630 Running                 sleep 4m &[root@bogon logs]# kill 3628[root@bogon logs]# jobs -l[1]   3628 Terminated              sleep 2m[2]-  3629 Running                 sleep 3m &[3]+  3630 Running                 sleep 4m &[root@bogon logs]# jobs -l[2]-  3629 Running                 sleep 3m &[3]+  3630 Running                 sleep 4m &[root@bogon logs]# jobs -l[2]-  3629 Running                 sleep 3m &[3]+  3630 Running                 sleep 4m &[root@bogon logs]# kill -9 3630[root@bogon logs]# jobs -l[2]-  3629 Running                 sleep 3m &[3]+  3630 Killed                  sleep 4m[root@bogon logs]# jobs -l[2]+  3629 Running                 sleep 3m &
复制代码


  • killall

  • 依据进程名杀死进程

  • killall 进程名

[root@bogon logs]# jobs -l[1]   3673 Running                 sleep 5m &[2]-  3674 Running                 sleep 6m &[3]+  3675 Running                 sleep 7m &[root@bogon logs]# killall sleep [1]   Terminated              sleep 5m[2]-  Terminated              sleep 6m[3]+  Terminated              sleep 7m[root@bogon logs]# jobs -l 
复制代码


  • 强制杀死某用户所有的进程

killall -9 -u 用户名
复制代码


  • pkill

    按照终端杀死进程,-t


【5】、nice 值


  • 每一个进程都会拥有一个“优先级(priority)”属性

  • 通过改变 nice 值,修改进程优先级

  • nice 值的范围是-20~19,nice 值越低优先级越高,nice 默认值是 0、

  • nice:在创建进程时设置 nice 值

  • renice:创建好进程后,重新设置 nice 值

[kiosk@foundation0 ~]$ ps efo  pid,command,nice    PID COMMAND                      NI   5890 bash SYSTEMD_EXEC_PID=2335    0   3058 bash SYSTEMD_EXEC_PID=2335    0   8949  \_ ps efo pid,command,nice   0   2245 /usr/libexec/gdm-wayland-se   0   2254  \_ /usr/libexec/gnome-sess   0
# 普通用户对于nice值只能调高(优先级只能调低),root用户对于nice值既可以调高,也可以调低[root@servera ~]# nice -n 19 ping 127.0.0.1 > /dev/null &[root@servera ~]# ps efo pid,command,nice PID COMMAND NI 1519 sudo -i SHELL=/bin/bash HIS 0 1523 \_ -bash HISTSIZE=1000 HOS 0 1545 \_ ping 127.0.0.1 SHEL 19 1546 \_ ps efo pid,command, 0 1078 /sbin/agetty -o -p -- \u -- 0 1065 /sbin/agetty -o -p -- \u -- 0[root@servera ~]# renice -n 10 15451545 (process ID) old priority 19, new priority 10[root@servera ~]# ps efo pid,command,nice PID COMMAND NI 1519 sudo -i SHELL=/bin/bash HIS 0 1523 \_ -bash HISTSIZE=1000 HOS 0 1545 \_ ping 127.0.0.1 SHEL 10 1548 \_ ps efo pid,command, 0 1078 /sbin/agetty -o -p -- \u -- 0 1065 /sbin/agetty -o -p -- \u -- 0 # 普通用户不允许调低nice值,也就是不允许将进程的优先级调高[student@servera ~]$ ping 127.0.0.1 > /dev/null &[1] 1577[student@servera ~]$ [student@servera ~]$ [student@servera ~]$ ps efo pid,command,nice PID COMMAND NI 1501 -bash USER=student LOGNAME= 0 1577 \_ ping 127.0.0.1 SHELL=/b 0 1578 \_ ps efo pid,command,nice 0[student@servera ~]$ renice -n 14 15771577 (process ID) old priority 0, new priority 14[student@servera ~]$ ps efo pid,command,nice PID COMMAND NI 1501 -bash USER=student LOGNAME= 0 1577 \_ ping 127.0.0.1 SHELL=/b 14 1581 \_ ps efo pid,command,nice 0[student@servera ~]$ renice -n 8 1577renice: failed to set priority for 1577 (process ID): Permission denied
复制代码


文章转载自:Linux小菜鸟

原文链接:https://www.cnblogs.com/xuruizhao/p/18292492

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
linux进程管理_Linux_不在线第一只蜗牛_InfoQ写作社区