进程管理
程序在运行后,我们需要了解进程的运行状态。查看进程的状态分为: 静态和动态两种方式。
1 使用ps命令查看进程状态
ps -aux
# -a:显示当前终端的所有进程信息
# -u:以用户的形式显示进程信息
# -x:显示后台进程运行的参数
状态 | 描述 |
---|---|
USER | 启动进程的用户 |
PID | 进程运行的ID号 |
%CPU | 进程占用CPU百分比 |
%MEM | 进程占用内存百分比 |
VSZ | 进程占用虚拟内存大小 (单位KB) |
RSS | 进程占用物理内存实际大小 (单位KB) |
TTY | 进程是由哪个终端运行启动的tty1、pts/0等。?表示内核程序与终端无关(远程连接会通过tty打开一个bash:tty) |
STAT | 进程运行过程中的状态 man ps (/STATE) |
START | 进程的启动时间 |
TIME | 进程占用 CPU 的总时间(为0表示还没超过秒) |
COMMAND | 程序的运行指令,[ 中括号 ] 属于内核态的进程。 没有 [ ] 的是用户态进程。 |
选项-aux
看不到父进程,我们使用-ef
选项查看
ps -ef
# -e 显示所有进程
# -f 全格式。
状态 | 描述 |
---|---|
UID | 用户ID |
PID | 进程ID |
PPID | 父进程ID |
C | CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算, 执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高 |
STIME | 进程启动的时间 |
TTY | 完整的终端名称 |
TIME | 进程占用 CPU 的总时间(为0表示还没超过秒) |
CMD | 程序的运行指令,[ 中括号 ] 属于内核态的进程。 没有 [ ] 的是用户态进程。 |
过滤某些进程
ps aux | grep bash # 过滤bash
2 使用top命令查看进程状态
top
命令提供系统进程的动态的实时情况
top
状态 | 描述 |
---|---|
Tasks: 103 total | 当前进程的总数 |
1 running | 正在运行的进程数 |
102 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
%Cpu(s) | 平均cpu使用率,按1查看每个cpu具体状态 |
0.0 us | 用户进程占用cpu百分比 |
0.2 sy | 内核进程占用百分比 |
0.0 ni | 优先级进程占用cpu的百分比 |
99.8 id | 空闲cpu |
0.0 wa | CPU等待IO完成的时间,大量的io等待,会变高 |
0.0 hi | 硬中断,占的CPU百分比 |
0.0 si | 软中断,占的CPU百分比 |
0.0 st | 虚拟机占用物理CPU的时间 |
top是一个强大的工具,在top界面,你可以使用这些常用按键
字母 | 含义 |
---|---|
h | 查看帮助 |
1 | 数字1,显示所有CPU核心的负载 |
z | 以高亮显示数据 |
b | 高亮显示处于R(进行中)状态的进程 |
M | 按内存使用百分比排序输出 |
P | 按CPU使用百分比排序输出 |
q | 退出top |
3 关闭进程
使用kill
关闭某些进程
kill -l # 列出当前系统所支持的信号
一共有64种信号,分为两类,不可靠信号(1-31)和可靠信号(32-64)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会(发送几次信号就收到几次)。
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 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
这些信号里,介绍一些常用的
数字编号 | 信号含义 | 信号翻译 |
---|---|---|
1 | SIGHUP | 一般守护进程都会在收到这个信号时重新加载配置。 (类似 reload) |
9 | SIGKILL | 强制杀死进程(有状态的服务(存磁盘的,如mysql)强制停止可能会导致下次起不来) |
15 | SIGTERM | 终止进程,默认kill不加参数就是这个信号 |
大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止。然而kill -9
命令,系统给对应程序发送的信号是SIGKILL,不会被阻塞直接递达,所以能顺利杀掉进程。
Linux系统中的killall
、pkill
命令用于杀死指定名字的进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall
、pkill
把这两个过程合二为一,是一个很好用的命令。
# 通过服务名称杀掉进程
vim nginx.conf # 修改为worker_processes 10;
kill -1 26093 # 平滑reload nginx,可以看到很多ngixn进程
kill 26121 # 杀掉一个子进程,会迅速的被master启动起来,只是id号不一致了
kill 26093 # 主进程,子进程都会被杀掉
# 通过服务名称杀掉进程
pkill nginx
killall nginx
# 使用pkill踢出从远程登录到本机的用户,终止pts/0上所有进程, 并且bash也结束(用户被强制退出)
pkill -9 bash