Linux之进程管理
一、 进程定义
进程的定义:
程序是静态的代码文件;
进程是指程序运行时的形态;
进程是程序的一个副本;
进程是有生命周期的(准备期,运行期,终止期)
进程与线程:
进程是资源调用的最小单位;
线程是进程的最小单位。
程序执行流是从上到下贯穿运行的;
当进程是多任务、CPU是多核心的,多任务应该同时被毎个核心处理,每个核心处理的任务叫线程。线程资源是共享的。
进程状态
R(TASK_RUNNING) 可执行态(runing,ready)
S(TASK_INTRRUPTABLE)可唤醒休眠
D (TASK_UNINTRRUPTABLE)不可唤醒休眠
T (TASK_STOP) 暂停状态
Z (EXIT_ZOMBLE) 僵死态
ps 进程查看命令
ps命令有三种执行风格 unix bsd GNU
以下是unix风格(无-)
ps a
与终端相关的进程(当用户登陆系统后产生的进程都是带终端的)
ps x
与终端无关的相关进程
ps u
用户信息归类的查看方式
ps f
进程层级关系
ps o
显示指定参数 pid,comm,nice,pri,pcpu,pmem,ppid,stat,user,group
ps -e
显示所有进程
ps -f
显示信息的完整格式
ps -H
显示进程的层级结构
ps -o=
=显示指定参数
ps -参数 --sort=参数
按sort=排序
pgrep 进程过滤命令
1. pgrep -u uid 『u可大写』 显示指定用户ID的进程
重新打开一个bash
2. pgrep -u user 「u可大写」显示指定用户名的进程
3.pgrep -t tty 显示指定终端进程
4.pgrep -l 显示进程名称
5.pgrep -a 进程名部分 显示进程完整名称
6.==pgrep -P == 时下进程子进程
pidof 进程名 查看进程的pid !有待查证
top 动态进程查看
top列表名称解释
top命令参数
top -d 指定刷新频率
top -b 以批次方式显示????
top -n 指定显示的批次数量
top内部命令
P 按CPU排序
M 按内存排序
T 累计占用CPU时间排序
l开启/关闭uptime信息
t 开启关闭cpu&task
s 修改刷新频率
k 操作进程 !!!操作有风险,下手需谨慎!!!
u 查看指定用户进程
三、进程优先级
reason
系统是多任务多用户的的操作模式,任务的重要性是有区分的,如何确定任务的重要性?
“优先级”
范围:0-139
内核自控优先级范围:0-99
用户可按优先级:100-139
nice : “-20” -“19”
renice -n -5 pid
更改pid的优先级为-5
[root@student_26 Desktop]# ps -o pid,comm,nice,pri,priority,stat
nice -n -5 cat
指定优先级打开进程
[root@student_26 Desktop]# nice -n -7 cat
pri
39-0
nice
20-19
priority
0-139(100-139)
STAT
S
sleeping
<
优先级高
s
顶级进程
T
stop
R
running
+
运行在前台
四、进程前后台调用
ctrl+z
把占用shell的进程打入后台挂起
[root@student_26 Desktop]# gedit
终端阻塞,弹出一个新edit窗口
ctrl+z
edit窗口阻塞
bg
把后台运行的进程运行起来
[root@student_26 Desktop]# bg
edit窗口正常运行
fg
把后台进程调回前台
[root@student_26 Desktop]# fg
终端阻塞
命令 &
运行进程在后台
[root@student_26 Desktop]# gedit &
弹出一个新edit窗口,终端不阻塞。
jobs
查看当前shell中在后台的所有工作
五、进程信息号
进程信号
1
重新加载系统配置文件(source)
2
清空内存中的进程数据
重新打开一个终端
原终端,未enter数据自动加ctrl+c
3
清空内存中的鼠标(ctrl+\)
9
强行结束进程(不能被阻塞)
ps:查到此终端pid
打开另一个终端
[root@node126 ~]# kill -9 3257
原终端关闭
15
正常关闭进程(会被阻塞)
18
运行被暂停的进程
[root@node126 ~]# gedit
^Z ##打入后台并挂起
[1]+ Stopped gedit
[root@node126 ~]# ps
PID TTY TIME CMD
2700 pts/1 00:00:00 bash
3920 pts/1 00:00:00 dbus-launch
3993 pts/1 00:00:00 gedit
4000 pts/1 00:00:00 ps
[root@node126 ~]# kill -18 3993 ##后台进程运行
[root@node126 ~]# jobs
[1]+ Running gedit &
[root@node126 ~]#
19
暂停进程(不会被阻塞)
20
暂停进程(会被阻塞的)##相当于ctrl+Z
重新打开一个终端
原终端并不会被暂停,为什么?
弹出edit窗口,
[root@node126 ~]# ps
PID TTY TIME CMD
3370 pts/0 00:00:00 bash
3462 pts/0 00:00:00 dbus-launch
3681 pts/0 00:00:00 gedit
3698 pts/0 00:00:00 ps
[root@node126 ~]# kill 20 3681
3681被关闭,为什么?
弹出edit窗口,
[root@node126 ~]# kill 20 3750
edit 被阻塞
进程信号控制工具
kill 进程信号 pid
killall 进程信号 进程名字
pkill 进程信号 进程条件
另一个终端
[root@student_26 Desktop]# kill -9 -u westos
搞掉了westos用户的所有进程。
六、systemd守护进程
实验环境
node1.westos.org ---------------> 172.25.254.126
node2.westos.org ----------------->172.25.254.226
###远程操作主机
ssh 远程主机ip -l 远程主机用户
守护进程
替内核分担程序控管的程序 #通常pid为1
systemd -------------->systemctl
systemctl 管理系统服务
服务,指在系统中开启的 共享系统资源到网络中的程序
cs
: client -----server
systemctl 命令的用法
systemctl start
开启
systemctl stop
关闭
systemctl status
查看状态
systemctl reload
重新加载
systemctl restart
重新启动服务
systemctl enable
设定服务开机启动
systemctl enable --now
设定服务开机启动并当前开启服务
systemctl disable
设定服务开机不启动
systemctl list-units
查看系统所有服务当前状态
systemctl list-unit-files
查看服务开机状态
systemctl list-dependencies
列出服务依赖性
systemctl mask
冻结服务
systemctl unmask
解锁
systemctl set-default
查看系统运行模式
0-6
0 POWEROFF
1 single
2 noG+NETWORK
3
4
5 G+NETWORK
6 REBOOT
systemctl status
查看状态
[root@node126 ~]# systemctl status sshd
systemctl stop
关闭
关闭并查看状态
[root@node126 ~]# systemctl stop sshd
[root@node126 ~]# systemctl status sshd
systemctl start
开启
开启并查看状态
[root@node126 ~]# systemctl start sshd
[root@node126 ~]# systemctl status sshd
systemctl reload
重新加载
[root@node126 ~]# systemctl status sshd
[root@node126 ~]# systemctl reload sshd.service
[root@node126 ~]# systemctl status sshd
reload之后,main pid 不会变。
systemctl restart
重新启动服务
[root@node126 ~]# systemctl status sshd
[root@node126 ~]# systemctl restart sshd
[root@node126 ~]# systemctl status sshd
restart之后,main pid会变。
systemctl enable
设定服务开机启动
[root@node126 ~]# systemctl disable --now sshd
[root@node126 ~]# systemctl enable sshd
systemctl disable
设定服务开机不启动
[root@node126 ~]# systemctl status sshd
[root@node126 ~]# systemctl disable sshd
Removed /etc/systemd/system/multi-user.target.wants/sshd.service.
[root@node126 ~]# systemctl status sshd
systemctl disable --now
设定服务开机启动并当前开启服务
[root@node126 ~]# systemctl disable --now sshd
systemctl list-units
查看系统所有服务当前状态
systemctl list-unit-files
查看服务开机状态
[root@node126 ~]# systemctl list-unit-files
systemctl list-dependencies
列出服务依赖性
[root@node126 ~]# systemctl list-dependencies
systemctl mask
冻结服务
[root@node126 ~]# systemctl stop sshd
[root@node126 ~]# systemctl start sshd
[root@node126 ~]# systemctl stop sshd
[root@node126 ~]# systemctl mask sshd
Created symlink /etc/systemd/system/sshd.service → /dev/null.
[root@node126 ~]# systemctl start sshd
Failed to start sshd.service: Unit sshd.service is masked.
systemctl unmask
解锁
[root@node126 ~]# systemctl start sshd
Failed to start sshd.service: Unit sshd.service is masked.
[root@node126 ~]# systemctl unmask sshd.service
Removed /etc/systemd/system/sshd.service.
[root@node126 ~]# systemctl start sshd
[root@node126 ~]#
systemctl get-default
查看系统运行模式
multi-user.target 无图形的网络模式
graphical.target 有图形的网络模式
系统运行模式
0-6
0 POWEROFF
1 single
2 noG+NETWORK
3
4
5 G+NETWORK
6 REBOOT
[root@node126 ~]# runlevel
N 5 #当前系统的运行级别为5,有图形的网络模式
[root@node126 ~]# init 3 ##修改系统运行级别为3
[root@node126 ~]# systemctl get-default
graphical.target ##当前仍为有图形的网络模式
[root@node126 ~]# runlevel
5 3 ## init 3是临时设定
[root@node126 ~]#
虚拟机变成了这样。
[root@node126 ~]# reboot
Connection to 172.25.254.126 closed by remote host.
Connection to 172.25.254.126 closed.
[root@student_26 Desktop]#
重启之后,图形又回来了。
[root@node126 ~]# systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.
无反应
[root@node126 ~]# reboot
Connection to 172.25.254.126 closed by remote host.
Connection to 172.25.254.126 closed.
[root@student_26 Desktop]#
虚拟机变成了这样。
[root@student_26 ~]# ssh -Xl root 172.25.254.126
root@172.25.254.126's password:
Activate the web console with: systemctl enable --now cockpit.socket
This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register
Last login: Fri Jan 22 12:23:28 2021 from 172.25.254.26
[root@node126 ~]# runlevel
N 3 ##永久修改runlevel为3
[root@node126 ~]#
[root@node126 ~]# reboot
Connection to 172.25.254.126 closed by remote host.
Connection to 172.25.254.126 closed.
还是这样
[root@node126 ~]# systemctl set-default graphical.target ##永久修改运行级别为5
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.
[root@node126 ~]# reboot
Connection to 172.25.254.126 closed by remote host.
Connection to 172.25.254.126 closed.
[root@student_26 ~]#
虚拟机图形回来了
[root@student_26 ~]# ssh -Xl root 172.25.254.126
root@172.25.254.126's password:
Activate the web console with: systemctl enable --now cockpit.socket
This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register
Last login: Fri Jan 22 12:37:16 2021 from 172.25.254.26
[root@node126 ~]# runlevel
N 5
[root@node126 ~]#
七、系统中的登录审计
w
显示正在登陆系统的账号
w -i
显示登陆来源
/var/run/utmp
[root@node126 ~]# vim /var/run/utmp
[root@node126 ~]# cat /var/run/utmp
last
登陆成功现在已经退出的
/var/log/wtmp
[root@node126 ~]# cat /var/log/wtmp #乱码
[root@node126 ~]# > /var/log/wtmp ##清空last记录
lastb
试图登陆但未成功
/var/log/btmp
[root@node126 ~]# cat /var/log/btmp ## 乱码
[root@node126 ~]# > /var/log/btmp ##清空lastb记录