Linux进程管理

admin 2024-9-1 89 9/1

什么是进程?

#进程是计算机中的一个程序,是关于某数据集合上的一次运行活动,它是系统进行资源分配和调度的基本单位,同时也是操作系统结构的基础。

进程的类型?

守护进程:在系统引导的过程中启动的进程,与终端无关。
这些进程在系统启动的时候立即运行,在会话结束的时候不退出,他们通常提供后台服务,比如日志记录邮件服务等。
前台进程:和终端相关,通过终端启动的进程。
这种进程运行在终端窗口中,用户可以直接与其交互,比如文本编辑器或者命令行工具。
后台进程
他们在终端会话结束的时候依然持续运行,比如定时任务的脚本或定时执行的服务。

进程的生命周期

父进程复制自己的地址空间创建一个新的子进程结构,每个新进程分配一个唯一的进程ID(PID)满足跟踪安全的需要,PID和父进程ID是子进程的环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。

systemd

#定义
systemd是一个用于管理Linux系统启动过程和系统服务的系统和服务管理器,是Linux的大管家,是所有进程的父进程。
#systemd管理工具 systemctl
systemctl start name.service#启动
systemctl stop  name.service#停止
systemctl restart name.service#重启
systemctl reload name.service#重载
systemctl enable name.service#开机自启动
systemctl disable name.service#关闭开机自启动
systemctl status name.service#查看状态
#开机自启动原理
一个服务设置开机自启动使用会将/usr/lib/systemd/system/name。service 软连接到/etc/systemd/system/,但是enable命令不会重写已经存在的链接,所以当我们修改了服务文件就需要重新加载
systemctl reenable name.servicec

查看进程状态

ps 命令
ps 选项
常用 ps aux
选项 
a 显示终端上的所有进程包括其他用户的进程
-A 列出所有的进程
-e 累出所有的进程
-H 以进程层级格式显示进程相关信息
-u 显示较详细的信息
-x 显示其他使用者的进程
[root@serve1 ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 193948  6980 ?        Ss   08:18   0:01 /usr/lib/systemd/systemd
root          2  0.0  0.0      0     0 ?        S    08:18   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    08:18   0:00 [ksoftirqd/0]
#user 进程拥有者 pid 进程id %cpu cpu占用率 %MEM 内存占用率 VSZ使用虚拟内存大小 RSS 使用常驻内存大小 TTY 执行的终端号 command 锁执行的命令 STAT 进程的状态
虚拟内存:虚拟内存是计算机系统内存管理的一种技术,为了缓解物理内存不足的压力。
进程状态:
D 无法中断的休眠状态
R 正在执行中
S 可中断执行
T 暂停执行
Z 不存在但是暂时无法消除(僵尸进程状态)
僵尸进程:每个进程结束之后都会出于僵死状态等待父进程调用进而释放系统资源,处于该状态的进程已经结束运行,但是他的父进程还没有释放其系统资源。
W 没有足够的内存可分配
< 高优先序的进程
N 低优先序的进程
N+ 前台进程
l 多进程线程
s 主进程(有子进程的进程)
#实例
#按照cpu使用率排序查看所有进程
[root@localhost ~]# ps aux --sort %cpu     # 递增
[root@localhost ~]# ps aux --sort -%cpu    # 递减
#按照实际内存使用排序查看所有进程
[root@localhost ~]# ps aux --sort rss     # 递增
[root@localhost ~]# ps aux --sort -rss    # 递减
#自定义显示格式
[root@localhost ~]# ps -axo 
user,pid,ppid,%mem,%cpu,command --sort -%cpu
#查看指定进程的pid多种方式
[root@localhost ~]# cat /run/sshd.pid 
[root@localhost ~]# ps aux |grep sshd
[root@localhost ~]# pgrep -l sshd
[root@localhost ~]# pidof sshd
#查看进程树
[root@localhost ~]# yum install -y psmisc
[root@localhost ~]# pstree
[root@localhost ~]# pstree --help
[root@localhost ~]# pstree -p   

top命令

#用于实时显示进程动态
top 选项
选项
-d 1 :改变显示速度,默认是3秒,改为1s
-n 次数 :更新完次数之后退出
-i 不显示任何闲置或者无用的进程
-p 进程号 :显示指定的进程信息
#进入top后交互式快捷键
空格 立即刷新
p 根据cpu使用多少排序
T 根据时间累计排序
M 根据内存大小排序
N 以pid大小排序
q 退出top
W 将当前设置写入到~/.toprc中
c 显示完整命令
t 显示cpu状态信息
1 查看cpu核数
[root@serve1 ~]# top
top - 10:09:17 up  1:50,  2 users,  load average: 0.00, 0.01, 0.02
Tasks: 153 total,   1 running, 152 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1863248 total,  1393884 free,   157296 used,   312068 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1497656 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    80 root      20   0       0      0      0 S   0.3  0.0   0:00.16 kworker/0:1
  3103 root      20   0       0      0      0 S   0.3  0.0   0:02.07 kworker/5:2
     1 root      20   0  193948   6980   4136 S   0.0  0.4   0:01.16 systemd

Loadaverage平均负载

Loadaverage :平均负载,是这一段时间内系统的平均负载,这一段时间一般取一分钟,五分钟,15分钟。
#查看平均负载
top uptime w
[root@serve1 ~]# uptime
 10:22:07 up  2:03,  2 users,  load average: 0.00, 0.01, 0.02
系统负载:system Load 是系统cpu的繁忙程度度量,也就是有多少个CPU被调度
Load数值含义
把单核cpu比喻成一条马路,进程任务比喻成马路上的汽车,Load则表示马路的繁忙程度。多核cpu比喻成多条马路。
load值<1 游刃有余
load 数值 =1 刚刚好
load数值 >1  受不了

kill命令

#kill 删除执行中的程序或者工作
kill -l 显示所有信号信息
[root@serve1 ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU   等等
常用信号编号:
1 重新加载
9 强制终止
15 正常终止
2 键盘中断
3 键盘退出
18 终止
20 暂停
#实例
#杀死所有ping命令
[root@localhost ~]# kill `pgrep ping`
#在Linux命令中,用反引号包含的命令会优先执行,并将执行结构作为参数提供给命令
pgrep 过滤进程,等到进程号
例如 pgrep ping 得到ping的进程号
#强制杀死
[root@localhost ~]# kill -9 123456
#重新加载配置
[root@localhost ~]# kill -1 pid

pkill

pkill 用于杀死一个进程,与kill不同的是pkill会杀死指定名字的所有进程,类似于killall命令
pkill 选项 name 
name 进程名
选项
-u 指定用户名
-t 指定终端
#实例
#结束所有sshd进程
[root@localhost ~]# pkill sshd
#结束用户user1的所有进程
[root@localhost ~]# pkill -u user1
#终止pts/2上所有的进程,并结束pts/2
[root@localhost ~]# pkill -9 -t pts/2
其中,pts/2 表示终端,用w可以显示终端
[root@serve1 ~]# w
 10:54:58 up  2:36,  3 users,  load average: 0.00, 0.01, 0.02
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      08:19    2:35m  0.01s  0.01s -bash
root     pts/0    192.168.62.1     08:19    2.00s  0.04s  0.01s w
root     pts/1    192.168.62.1     10:54    7.00s  0.02s  0.01s vim

nice优先级

nice
nice 命令用来修改程序的优先级别,默认nice值为0,范围-20到19
-20优先级最高
19 优先级最低
nice数值越小,表示程序会被优先处理,在系统运行缓慢的时候,nice越小的进程有越高的优先级处理级别。
nice 选项 参数
选项 
-n 设置nice值
#实例
将ping的优先级设置为1并执行
[root@localhost ~]# nice -n 1 ping www.baidu.com
#查看nice值
#使用top命令查看nice值
PID USER      PR  NI   VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 #NI 表示nice值
    80 root      20   0       0      0      0 S   0.3  0.0   0:00.16 kworker/0:1
  3103 root      20   0       0      0      0 S   0.3  0.0   0:02.07 kworker/5:2
     1 root      20   0  193948   6980   4136 S   0.0  0.4   0:01.16 systemd
 #使用ps命令查看nice值
[root@localhost ~]# ps axo pid,command,nice --sort=nice
#更改现有nice值
1.使用top命令更改
以ping命令为例
首先,pgrep ping 获得ping的进程号
top -p 进程号 #查看单独进程
r 修改nice值
2.使用shell更改nice
1.首先获得进程号
2.renice -20  进程号
#renice命令修改

PRI

top命令可以查看PR这个数值,PR和nice都会影响执行的优先级,PR与nice的区别是PR由os内核动态调整,用户不能更改,PR数值越低,进程执行的优先级越高。
PR新=PR旧+nice

前台后台进程管理

在Linux中,守护进程一般是后台进程,但是后台进程不一定是守护进程。
前台进程是在终端中运行的命令,该终端为进程的控制终端,前台进程接收键盘产生的输入和信号,并允许从终端读取或者写入终端。
后台进程:后台进程就是运行在后台的进程,没有终端对其进行控制,不需要和终端进行交互。后台进程CTRL +c打断不了。
有些进程只能在前台进行,如果把它放入后台会自动停止。

jobs

jobs命令可以用来查看当前终端放入后台的任务

将任务放入后台

#Linux将命令放入后台的方法
1.在命令后加 空格 &
2.在命令执行的过程中按CTRL+Z快捷键 ,命令在后台处于暂停状态。
#实例
将任务放入后台,然后查看任务
[root@serve1 ~]# top &
[root@serve1 ~]# vi &
[root@serve1 ~]# ping www.baidu.com >/dev/null &
[root@serve1 ~]# jobs
[1]   已停止               top
[2]-  已停止               top
[3]+  已停止               vi
[4]   运行中               ping www.baidu.com > /dev/null &
[1] 表示工作号
+ 最近一个放入后台的进程,也是恢复时默认恢复的进程
- 倒数第二个放入的

将任务恢复到前台

fg % 工作号
%可以省略,不加工作号默认恢复带+的进程

将后台任务恢复到后台运行

CTRL+Z 将前台工作放入后台但是会处于暂停状态,额可以使用bg命令恢复其运行
bg % 工作号
同样,%可以省略

nohup

虽然可以将程序放到后台运行,但是一旦关闭远程连接程序就中断,我们想要将程序一致保持在后台运行,那么我们可以以下三个选择;
1.把需要执行的命令加入/etc/rc.loacla文件,让系统启动的时候执行这个后台程序,但是这个方法的问题是服务器是不能随便重启的,如果有临时后台任务旧不能执行了。
2.使用系统定时任务,让系统在指定的时间执行某个后台命令,这样放入后台的命令与终端无关,是不依赖登录终端的。
3.使用nohup命令
nohup 命令&
这里的&表示会在终端后台工作,反之没有&的话表示此命令会爱终端前台工作。
[root@localhost ~]# nohup ping baidu.com &

关闭后台进程的方法

1.pkill kill
2.将后台进程恢复到前台,用ctrl+c
- THE END -

admin

9月01日18:08

最后修改:2024年9月1日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论