Linux中的进程管理

1.进程的定义

定义:程序时静态的代码文件,进程是指程序运行时的状态,是程序的一个副本,进程是有生命周期的(准备区、运行期、终止期)

(1)进程与线程

进程是资源调用的最小单位,线程是进程的最小单位,程序执行流是从上到下贯穿运行的

当进程是多任务物,cpu是多核心,多任务应该同时被每个核心处理,每个核心处理的任务叫线程,线程资源是共享的

(2)进程状态

R(TAKS_RUNNING)                                       可执行态

S(TASK_INTRRUPTABLE)                             可唤醒休眠

D(TASK_UNINTRRUPTABLE)                        不可唤醒休眠

T(TASK_STOP)                                               暂停状态

Z(EXIT_ZOMBIE)                                            僵死态

2.进程查看命令

(1)进程查看

gnome-system-monitor                            图形进程查看工具

 

ps                                   进程查看

 

ps a                                与终端相关的进程

 

ps x                                与终端无关的进程

 

ps ax                              所有进程

 

ps axu                            用户信息归类的所有进程

 

上图中,USER表示进程所有人,PID表示进程id,%CPU表示cpu占有率,%MEM表示内存占有率,VSZ表示进程使用的虚拟内存的大小,RSS表示进程常驻内存中的数据大小,TTY表示进程用到的终端,STAT表示进程状态,START表示进程运行时长,TIME表示进程占用cpu时长,COMMAND表示进程名称

ps axo pid                      只显示pid的所有进程

 

ps axo pid,&cpu             显示pid和cpu占有率的所有进程

 

ps -e                               显示所有进程

 

ps -ef                              显示所有进程的完整格式

 

ps axf                             显示所有进程的层级关系

 

ps -eH                            显示所有进程的层级结构

 

ps ax --sort=+%cpu       将所有进程按cpu占有率升序排列

 

ps axo %cpu--sort=-%cpu      将只显示cpu占有率的所有进程按cpu占有率降序排列

 (2)进程过滤

<1> pgrep和pidof命令

pgrep -u 0                                   显示uid为0的进程

 

pgrep -U user                             显示指定用户名的进程

pgrep -t tty                                  显示指定终端的进程

pgrep -l                                       显示进程名称

pgrep -a                                      显示进程完整名称

pgrep -lU westos                        显示westos用户的进程并显示进程名称

 

pgrep -at pts/0                            显示pts/0终端的进程并显示进程完整名称

 

pidof xxx                                     查看xxx的pid

pgrep -P pid                                显示进程的子进程

运行以下命令

ps                                                查看当前shell的pid

vim &                                           vim后台运行

pidof vim                                      查看vim的pid

运行结果如下

 

查询到当前shell的pid为11826,vim的pid为11870

pgrep -P 11826                           查看pid为11826的进程的子进程

运行结果如下

 

发现此id与之前查询到vim的pid相等

<2> top命令

top -b -n 1                          以批次方式显示,批次数量为1 

注:top命令为动态显示进程                  

top命令打开后的显示界面如下图所示

其中第一行的load average分别表示系统1min、5min、15min处理任务的时间

第二行total表示任务总量,running表示正在运行的任务数,sleeping表示休眠任务数,stopped表示被暂停任务数,zombie表示僵死任务数

第三行us表示用户空间,sy表示内核空间,ni表示nice值调整时间,id表示空闲时间,wa表示等待io时间,hi表示处理硬件中断时间,si表示处理软件中断时间,st表示vm使用时间

第四行total表示内存总量,free表示空闲内存,used表示占用内存,buff/cache表示缓存

第五行MiB Swap表示交换分区用量

注:在进入top命令界面后,可进行一些内部操作来调整进程显示,如:

P                     cpu排序(降序)

 

M                    内存排序(降序)

 

T                     占用cpu时间排序(降序)

 

l                       关闭/开启uptime信息

未执行 l 操作前

 

执行 l 操作后

 

t                       关闭/开启cpu&task

未执行 t 操作前

 

执行t操作后

 

s                      指定刷新频率(默认3s)

上图修改刷新频率为1s 

k                      操作进程

 

u                      查看指定用户进程

 3.进程优先级

意义:系统是多任务多用户的操作模式,任务的重要性是有区分的,如何来确定不同任务的重要性呢?引入“优先级”这个概念就是来让系统明确不同任务的重要性

范围:0—139      内核自控优先级范围:0—99      用户可控优先级范围:100—139

符号含义:              S    sleeping                   <   优先级高                    s    顶级进程            
T   stop                    N   优先级低                    R   running                    +   运行在前台

(1)nice命令

范围:-20—19

renice  -n  -5  xxxxx                        更改xxxxx的优先级为-5

nice  -n  -5  cat                                指定-5的优先级打开cat进程

操作步骤:

<1> 实验对象的准备

vim &                                                     vim后台运行

ps ax -o pid,nice,comm | grep vim        查看vim的pid、nice值和名称

运行结果如下:

发现vim的pid为2961,nice值为0

<2> 修改vim的nice值

renice -n -10 2961                               更改pid为2961进程的nice值为-10

ps ax -o pid,nice,comm | grep vim       

运行结果如下:

 

发现vim的nice值已经被更改为-10

执行以下命令强制结束vim进程    killall  -9 vim

nice -n 5 vim &                               指定vim优先级为5并后台运行vim

ps ax -o pid,nice,comm | grep vim

运行结果如下

发现vim的优先级已经被更改为5 

4.进程前后台调用

ctrl + z           把占用shell的进程打入后台挂起                  bg     把后台挂起的进程运行起来

fg     把后台进程调回前台           &    运行进程在后台       jobs    查看当前shell中在后台的所有工作

输入以下命令

cat &                          后台运行cat

vim &                         后台运行vim

jobs

运行结果如下:

发现cat和vim均在后台挂起 

5.进程信息号及控制工具

(1)进程信号

1                重新家在系统配置文件(source)
2                清空内存中的进程数据
3                清空内存中的鼠标(ctrl+\)
9                强行结束进程(不能被阻塞)
15              正常关闭进程(会被阻塞)
18              运行被暂停的进程
19              暂停进程(不会被阻塞)
20              暂停进程(会被阻塞的)

(2)控制工具

kill  进程信号  pid

killall  进程信号   进程名字

pkill   进程信号    进程条件

(3)实验验证

vim &

ps

运行结果如下图所示

 

可知当前shell的pid为4090,vim的pid为4119

然后重新打开一个shell,执行以下命令:

kill -15 4090

ps

运行结果如下:

 

发现无法关闭shell,若执行 kill -9 4090,运行结果如下:

 

上图显示成功关闭shell

vim &

vim &

ps

运行结果如下图所示

 

若运行 killall -9 vim  及 ps ,结果如下:

 

发现所有进程名为vim的进程均被强制关闭

6.systemd守护进程

(1)搭建实验环境

nodea虚拟机                      ip地址:192.168.2.66

nodeb虚拟机                      ip地址:192.168.2.88

在nodea虚拟机的shell中执行以下命令

ping 192.168.2.88                                连接到192.168.2.88

运行结果如下

证明两虚拟器网络已连接

(2)远程操作主机

ssh  远程主机ip  -l  远程主机用户

注:在nodea虚拟机的shell中执行以下命令 

ssh -l root 192.168.2.88

运行结果如下:

此时表明远程主机登录成功 

再输入以下命令 

cd /root/Desktop

touch file

运行结果如下:

发现在nodea的shell中输入的新建文件命令,文件新建在了nodeb的桌面上,表明远程连接主机成功,可进行基本文件管理

(3)守护进程

定义:替内核分担程序控管的程序,通常pid为

符号:systemd  ———   systemctl

<1> systemctl 管理系统服务

服务的定义:在系统中开启的共享系统资源到网络中的程序

systemctl用法:

systemctl status sshd                                         //查看sshd的状态

 

运行以下命令
systemctl stop sshd                                           //关闭sshd
systemctl status sshd

运行结果如下:

 

运行以下命令
systemctl start sshd                                           //开启sshd
systemctl status sshd

运行结果如下:

 

运行以下命令
systemctl disable  sshd.service                          //设定服务开机不启动
systemctl status sshd

运行结果如下:

 

运行以下命令
systemctl disable  --now sshd                           //设定服务当前不启动
systemctl status sshd

运行结果如下:

 

运行以下命令
systemctl enable sshd                                        //设定服务开启启动
systemctl status sshd

运行结果如下:

 

运行以下命令
systemctl enable --now sshd                             //设定服务当前启动
systemctl status sshd

运行结果如下:


systemctl list-units                                              //查看系统所有服务当前状态

 

systemctl list-unit-files                                        //查看服务开机状态

systemctl list-dependencies                                //列出服务依赖性


systemctl list-dependencies sshd                        //列出sshd服务依赖性

  

运行以下命令
systemctl mask sshd                                            //冻结sshd服务
systemctl start sshd                                             
systemctl status sshd

运行结果如下:

 

发现无法开启sshd,运行以下命令                                           
systemctl unmask sshd.service                            //解锁sshd服务
systemctl start sshd
systemctl status sshd                                           

运行结果如下:

 

发现sshd已解锁,可正常开启sshd                                                                                                systemctl set-default multi-user.target                 //开启无图形网络模式
systemctl set-default graphical.target                  //开启有图形网络模式

运行以下命令
systemctl get-default                                           //查看系统运行模式

运行结果如下:

 

可知当前运行模式为有图形网络模式,也可用以下命令查看系统运行模式

runlevel

运行结果如下:

 

其中,0-PEWEROFF      1-single       2-noG+NETWROK      3.4.5-G+NETWORK       6-REBOOT

表明系统当前运行模式为有图形网络模式

7.系统中的登录审计

w -i                       //查看正在登录此系统的用户及ip地址
last                       //查看使用过此系统的用户及ip地址
lastb                     //查看试图登录此系统但未成功的用户及ip地址

实验操作步骤:

<1> 正在登录的用户查看

运行以下命令,使nodea的用户登录到nodeb系统中

ssh -l root 192.168.2.88

正确输入nodeb的密码之后,成功登录,运行结果如下:

 

此时,在nodeb的shell中执行 w -i 命令,运行结果如下:

 

可看到nodea的用户名及ip地址,此信息存放在/run/utmp中,若执行以下命令
> /run/utmp          //删除/run/utmp中的内容

w -i

运行结果如下:

 

发现nodea用户的登录记录消失

<2> 使用过此系统的用户记录查看

先将nodea用户退出nodeb系统,执行 exit 命令,运行结果如下:

 

此时在nodeb的shell中执行 last 命令,运行结果如下:

 

发现一条nodea用户的登录用户名及其ip地址,此信息存放在/var/log/wtmp,再执行以下命令

 > /var/log/wtmp                //删除/var/log/wtmp中的内容

last

运行结果如下:

 

发现nodea用户的登录记录已经消失

注:此命令只能查看已登录过的用户记录,无法查看正在登录的用户记录

<3> 试图登录但未成功的用户记录查看

在nodea的shell中执行命令 ssh -l root 192.168.2.88  ,并错误的输入nodeb系统用户的密码,运行结果如下:

 

此时,在nodeb的shell中执行命令 lastb 运行结果如下:

 

发现3条nodea用户的登录失败记录,此信息存放在/var/log/btmp中,执行以下命令

> /var/log/btmp                       删除 /var/log/btmp的内容

lastb

运行结果如下:

 

发现nodea用户的登录失败记录消失

                       

 

 

  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值