基于Linux下的进程管理

进程:

定义:进程也就是cpu未完成的工作。这和我们windows里面的进程概念基本类似。

ps命令:

ps

a                关于当前shell运行的所有进程

x | -A           所有进程,x显示状态-A不会。这是两个命令

f                显示进程从属关系

e                显示进程调用环境工具的详细信息

l                长列表显示进程的详细信息

u                显示进程的用户信息

-a               显示shell前台运行命令的进程,但不包括shell本身

下图ps a等命令由于进程过多就不展示结果了,命令的格式如下:


ps的相关命令操作:

[[email protected] Desktop]# whatis ps          查看ps命令的含义

ps (1)               - report a snapshot of the current processes.

ps (1p)              - report process status

[[email protected] Desktop]# ps

  PID TTY          TIME CMD

  886 pts/1    00:00:00 ps

 2791 pts/1    00:00:00 bash

[[email protected] Desktop]# ps a    关于当前shell运行的所有进程

  PID TTY      STAT   TIME COMMAND                             

[[email protected] Desktop]# ps ae  关于当前shell运行的所有进程运行环境的详细信息

  PID TTY      STAT   TIME COMMAND

[[email protected] Desktop]# ps aef  关于当前shell运行的所有进程运行环境以及进程附属关系(简略显示几行,不然看起来太多太复杂)

  PID TTY      STAT   TIME COMMAND

[[email protected] Desktop]# ps -A | head -n 2 显示所有进程

  PID TTY          TIME CMD

    1 ?        00:00:01 systemd

[[email protected] Desktop]# ps x | head -n 2  显示所有进程,还有状态显示(与ps -A的区别)

  PID TTY      STAT   TIME COMMAND

    1 ?        Ss     0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 19

[[email protected] Desktop]# ps -a  显示shell前台运行命令的进程,但不包括shell本身

  PID TTY          TIME CMD

  904 pts/1    00:00:00 ps

 3067 pts/0    00:00:00 su

 3068 pts/0    00:00:00 bash

[[email protected] Desktop]# bash   重新打开shell

[[email protected] Desktop]# ps -a  显示shell前台运行命令的进程,但不包括shell本身

  PID TTY          TIME CMD

  905 pts/1    00:00:00 bash

  938 pts/1    00:00:00 ps

 3067 pts/0    00:00:00 su

 3068 pts/0    00:00:00 bash

ps -o %cpu,%mem,user,group,comm,nice,pid,stat           

指定显示进程的某些信息

[[email protected] Desktop]# ps -o comm 指定显示进程名称。

COMMAND

bash

ps


bash

%cpu                                显示进程cpu负载

%mem                                显示进程内存负载

user                                 进程用户

group                                进程组

comm                                 进程名称

nice                                 进程优先级

pid                                  进程的id

stat                                 进程状态

stat中显示的信息

S                                    进程状态

l                                    内存中有锁定空间

N                                    优先级低

<                                    优先级高

+                                    前台运行

s                                    顶级进程


ps ax -o %cpu,comm --sort <+|-%cpu > <+|-%mem>             按照进程信息排序

+                                             正序

-                                             倒序

%cpu                                          cpu负载排序

%mem                                          内存负载


具体操作演示:

[[email protected] Desktop]# ps ax --sort=%mem  按照内存负载排序

 PID TTY      STAT   TIME COMMAND

    2 ?        S      0:00 [kthreadd]

    3 ?        S      0:00 [ksoftirqd/0]


[[email protected] Desktop]# ps ax --sort=-%mem -o %mem  按照内存负载进行倒序排序

%MEM

20.9

 4.1


[[email protected] ~]# ps ax --sort=-%mem -o %mem,comm 按照内存负载进行倒序排序同时显示进程名称。

%MEM COMMAND

20.9 gnome-shell

 4.1 Xorg

[[email protected] ~]# ps ax --sort=-%cpu -o pid | head -n 6 | tail -n 5    ax所有程序 --sort=-%cpu按照cpu逆序排序  按照pid顺序,方法一。

 1865

  595

    1

    2

    3

[[email protected] ~]# ps ax --sort=-%cpu -o pid,%cpu|awk 'NR<=6&&NR>=2{print}'   方法二。

 1865  0.7

  595  0.1

    1  0.0

    2  0.0

    3  0.0


进程优先级:

1.进程的优先级范围

-20~19

2.优先级查看

ps ax -o pid,nice,comm

3.指定某个优先级开启进程

nice -n 优先级数字 进程名称

nice -n -5 vim &                         开启vim并且指定程序优先级为-5

4.改变进程优先级

reince -n                     优先级数字 进程pid

renice -n -5 1806              改变1806进程的优先级为-5

相关具体操作:

[[email protected] ~]# renice -n 0 1128   改变1128的优先级为0

1128 (process ID) old priority 0, new priority 0

[[email protected] ~]# renice -n -1 905      改变905的优先级为-1

905 (process ID) old priority 0, new priority -1

下图展示我们使用renice更改bash优先级之后,优先级从0变成了-6


[[email protected] ~]# nice -n -5 vim &       指定优先级建立文件

[1] 1148

[[email protected] ~]# renice -n -5 1159    改变1159的优先级为-5

1159 (process ID) old priority -1, new priority -5

[[email protected] ~]# ps -o nice,comm,pid,stat 查看1159的优先级

 NI COMMAND           PID STAT

 -1 bash              905 S<

 -5 vim              1159 T<

 -1 ps               1163 R<

  0 bash             2791 Ss

[[email protected] ~]# nice -n 5 vim &     以-5的优先级建立文件

[1] 1164


环境中进程的前后台调用:

[[email protected] Desktop]# jobs  查看被打入环境后台的进程

[[email protected] Desktop]# fg 2  把序号2后台进程调回前台

bash: fg: 2: no such job

jobs                     查看被打入环境后台的进程

ctrl+z                   把占用终端的进程打入后台

fg jobsnum               把后台进程调回前台

bg jobsnum               把后台暂停的进程运行

comm &                   让命令直接在后台运行

相关具体命令操作:

[[email protected] ~]# gedit   占用后台打开一个文件

** (gedit:1339): WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-Py9xsAJdi1: Connection refused

^Z

[1]+  Stopped                 gedit

[[email protected] ~]# jobs    查看被打入环境后台的进程

[1]+  Stopped                 gedit

[[email protected] ~]# vim &     在后台打开文件

[2] 1344

[[email protected] ~]# jobs    查看被打入环境后台的进程

[1]-  Stopped                 gedit

[2]+  Stopped                 vim

[[email protected] ~]# bg 1    把后台暂停的进程1运行

[1]- gedit &

[[email protected] ~]# fg 2    把后台进程2调回前台

vim

[[email protected] ~]# fg 1    把后台进程1调回前台

gedit

^Z

[1]+  Stopped                 gedit

[[email protected] ~]# jobs

[1]+  Stopped                 gedit

[[email protected] ~]# fg

gedit

^Z

[1]+  Stopped                 gedit


进程信号:

1.常用信号等级

1                                 进程不结束仅仅重新加载配置

2                                 删除进程在内存中的数据

3                                 删除鼠标在内存中的数据

9                                  强行结束单个进程(不能被阻塞)

15                                 正常关闭进程  (可能会被阻塞)

18                                 运行暂停的进程    

19                                 暂停某个进程  (不能被阻塞)

20                                 把进程打入后台 (可以被阻塞)


man 7 signal           查看信号详细信息

第二张图为信号的详细信息:



kill -信号 进程pid                   结束单一进程


killall -信号 进程名字               结束同一名字的进程


pkill -u student -信号               切换到普通用户关闭vim同时关闭student的shell