中断进程
信号可以是错误或者外部的事件发送出来,通过发送指定的信号,可以向执行中的程序报告事件,这样就可以触发特定的动作。
基本信号控制进程
| 信号编号 | 短名称 | 定义 | 用途 |
|---|---|---|---|
| 1 | HUP | 挂起 | 用于报告终端控制进程的终止,也用于请求进程重新初始化(重新加载配置)而不终止。 |
| 2 | INT | 键盘中断 | 导致程序终止,可以被拦截或处理, 可通过 Ctrl + c 发送 |
| 3 | QUIT | 键盘退出 | 与 SIGINT (就是 INT 啦) 相似;在终止时添加进程转储。可通过按 Ctrl + \ 发送 |
| 9 | KILL | 中断 | 立即终止程序,无法被拦截或处理 |
| 15 (默认) | TERM | 终止 | 但和 SIGKILL (就是 KILL 啦)不同,可以被拦截和处理,允许自我清理 |
| 18 | CONT | 继续 | 发送至进程,使其恢复(若之前是停止状态),无法被拦截,始终会恢复进程 |
| 19 | STOP | 停止 | 暂停进程,无法被拦截或处理 |
| 20 | TSTOP | 键盘停止 | 与 SIGSTOP (就是 STOP 啦)不同,可以被拦截和处理,可通过 Ctrl + z 发送 |
使用 kill 命令,根据 PID 编号就可以向进程发送信号,虽然是叫做 kill,但是可以发送很多种信号哦。
# 查看可发送的信号
kill -l
# 查看进程
ps aux
# 假设有一个 222 的进程 使用默认参数,进行终止
kill 222
# 通过传递信号参数的方式,进行终止
kill -SIGTERM 222
# 通过信号的对应编号参数,进行终止
kill -15 222
# 向多个 命名名称一样的进程发送信号
# killall 命令
killall control
# 向多个符合条件的进程发信号
# 比如关掉某个用户的所有进程
pkill -U user1
以管理员身份终止其他用户的会话
出于管理的原因,可能会需要注销其他的用户,比如某个用户进行安全违规行为、用户过度占用资源、用户的系统突然不响应等等。这些情况下,就需要以管理员的身份来终止会话。
使用 w 命令可以列出用户登录和当前运行的进程。如果设备名称的格式为 pts/N, 说明这是一个与图形终端窗口或远程登录会话相关联的伪终端。如果格式为 ttyN,则说明用户位于一个系统控制台、替代控制台或其他直接连接的终端设备上。
使用 pgrep 可以先确定要中断的 PID 编号,具有 和 pkill 相同的选项,只是他只是练出进程而不是中断进程。
# 假设当前是 root 用户
# 假设有一个用户 bob
pgrep -l -u bob
# 如果想要查看 父子进程之间的关系,需要 pstree
pstree -p bob
# 然后 pkill 来终止 bob 用户
pkill -SIGKILL -u bob
监控进程活动
负载平均值是 Linux 内核提供的一种度量方式,它可以简单地表示一段时间内感知的系统负载。内核会每五秒收集一次当前的负载数,通过汇总这些数值,可以得到最近 1 分钟、5 分钟和 15 分钟内的指数移动平均值。
负载数基本上是根据准备运行的进程数(进程状态 R ) 和等待 I/O 完成的进程数 (进程状态为 D ) 而得到的。
使用 uptime 命令是显示当前负载平均值的一种方法。它可显示当前时间、计算机启动时长、运用的用户会话数以及当前的负载平均值(1、5、15 分钟)
使用 lscpu 命令可以查看系统有多少 CPU。
实时进程监控。
top 命令可以动态的显示系统进程,会根据配置的间隔持续刷新。配置可以保存到本地文件,变为永久。默认的输出项有很多: 进程 PID 、用户 USER、虚拟内存 VIRT、 常驻内存 RES、进程状态 S、 CPU 时间。
top 命令的基本操作