Linux进程管理
Linux 进程管理是系统管理员和开发人员必须掌握的核心技能之一。以下是一些常用的进程管理命令和技巧
1. 进程是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位。
2. 进程包含了程序执行所需的各种资源,如内存空间、文件描述符等。
3. 每个进程都有自己独立的内存空间和系统资源,不同进程之间相互隔离。
4. 程序是静态的代码文件,进程是指程序运行时的形态(调用系统资源将静态的代码文件运行起来)。
5. 进程是程序的一个副本。
6. 进程是有生命周期的(准备期,运行期,终止期);生命周期通常从安装开始,到最终被用户卸载结束。在这个过程中,它会经历不同的阶段,包括引导、运行、维护和再次引导
查看进程
进程的状态
Linux进程可以处于以下几种状态之一:
- 运行(Running):进程正在CPU上执行。
- 就绪(Ready):进程已准备好运行,等待CPU调度。
- 等待(Waiting):进程在等待某些事件(如I/O操作)完成。
- 停止(Stopped):进程被暂停,通常是由于收到信号(如SIGSTOP)。
- 僵尸(Zombie):进程已终止,但其父进程尚未调用
wait()
或waitpid()
来获取其退出状态。
进程间通信
Linux提供了多种进程间通信(IPC)机制,包括:
- 管道(Pipe):用于父子进程之间的通信。
- 消息队列(Message Queue):允许进程通过消息进行通信。
- 共享内存(Shared Memory):允许多个进程共享一块内存区域。
- 信号(Signal):用于进程间的异步通知。
- 套接字(Socket):用于网络通信或本地进程间通信。
top数列的详解
1.PID: 进程ID,唯一标识一个进程的编号。
2.USER: 进程所有者的用户名。
3.PR: 进程的优先级。
4.NI: nice值,用于调整进程的优先级。默认值是0,范围是-20到19。
5.VIRT: 进程使用的虚拟内存总量,单位是KB。
6.RES: 进程当前使用的、驻留在物理内存中的大小,单位是KB。
7.SHR: 共享内存大小,单位是KB。
8.S: 进程的状态。常见的状态有R(运行中)、S(休眠)、Z(僵尸进程)等。
9.%CPU: 该进程占用的CPU使用率。
10.%MEM:该进程占用的物理内存使用率。
11.TIME+: 该进程启动后总共运行的时间,单位是分钟:秒。
12.COMMAND: 启动进程的命令名称或命令行。
4.结束进程
使用kill命令:
kill
如果进程不响应,可以使用-9选项强制结束:
kill -9
使用pkill或killall命令通过进程名称结束进程:
pkill [进程名称]
killall
如果你需要结束一个子进程,可以使用pgrep来查找进程ID,然后用kill或pkill结束它:
pgrep -f [子进程名称]
kill
使用xkill命令来结束图形界面程序:
首先运行xkill,然后点击你想要结束的程序的窗口,它会发送SIGTERM信号。
如果你需要结束一个会话中的所有进程,可以使用kill命令加上-HUP选项:
kill -HUP
5.工作管理命令
&把进程放入后台
jobs -l 显示后台工作程序
fg %工作号 将后台暂停的工作恢复到前台执行
bg %工作号 后台恢复执行的命令
6.定时任务
查看crontab服务状态:systemctl status crond
ps
---进程状态查看
ps具有三种命令的执行风格
unix //ps命令的参数跟- 例如 ps -e ,ps -o
bsd //ps命令不用跟- ,例如 ps ax ,ps aux
GUN //长参数
a
//与终端相关的进程
x
//与终端无关的进程
ps ax
//查看所有进程信息
u
//使用用户信息归类的查看方式
f
//进程层级关系
o
//显示指定参数
-e
//显示所有进程,相当于bsd风格的ps ax
-f
//显示信息的完整格式
-H
//显示进程的层级结构,相当于bsd风格的ps f,与之不同的是使用缩进
-o
//与bsd风格的ps o 作用一摸一样,显示指定参数
--sort=
//对进程进行排序 ,=后面跟的是依据什么参数继续排序,=后跟“-”进行倒序
pgrep
//进程过滤
pgrep参数
-u
//u 后面跟所要过滤出来进程的uid
-U
//U 后面跟的是进程名
-t
//tty显示指定终端进程、
-l
//显示进程名称
-a
//显示进程的完整名称
-P
//显示进程的子进程
pidof
pidof vim
//查看vim的pid
top
//动态进程查看
op参数
-d
//指定刷新频率
top -d 0.1 //默认为3s
-n
//指定显示的批次数量,次数结束就不刷新
top -d 1 -n 2 //在刷新频率为1s/次的情况下,刷新两次就不刷新
-b
//不显示系统信息,只显示进程信息
top -b
6.定时任务
查看crontab服务状态:systemctl status crond
开启定时服务: systemctl restart crond
语法: crontab [选项]
crontab -e 进入crontab编辑界面。会打开vim编辑
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
* * * * *
没颗星星的顺序:分 时 日 月 周
分钟,可以是从0到59之间的任何整数。
小时,可以是从0到23之间的任何整数。
日期,可以是从1到31之间的任何整数。
月份,可以是从1到12之间的任何整数。
星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
(*):代表所有可能的值,例如月份字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
(,):可以用逗号隔开的值指定一个列表范围
(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
(/):可以用正斜线指定时间的间隔频率,正斜线可以和星号一起使用,例如*/10,如果用在分钟字段,表示每十分钟执行一次也可以与其他符号配用