Linux 进程管理
# ps 进程查看
# 查看所有进程
显示所有状态
ps -aux
# 查看指定程序进程
比较常用的命令
ps -ef |grep tomcat
# 查看当前用户相关进程信息
ps aux | more
# 查看指定进程
注意,如果有找到进程,则在当前一行的下方出现进程相关的内容。
如果没有找到,则如终会有多一行的信息被展示出来。
可以拿 tomcat 试试。
ps -aux | grep tomcat
# 查看精确运行时间
ps -eo pid,lstart,etime,cmd | grep 20350
# 字段含义解释
ps -ef
字段含义如下:
UID PID PPID C STIME TTY TIME CMD
root 18887 18828 0 08:09 pts/0 00:00:00 grep ApacheJetspeed
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID
PPID 则是其上级父程序的 ID
C CPU 使用的资源百分比
STIME 系统启动时间
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何
# 精确动行时间
精确时间和启动后所流逝的时间
命令
ps -eo pid,lstart,etime,cmd | grep 20350
结果如下
20350 Wed Jun 30 15:57:11 2021 16-00:00:48 java -Xms18g -Xmx18g 省略…
# kill 杀死进程
通过 pid 发送终止信号,终止进程。
# 彻底杀死进程
最常用的操作,比较暴力,生产环境如果可以确定强制杀死进程不影响数据正确性,可以用 -9
,否则一般使用 kill -15
kill -9 pid
# 杀死所有用户进程
这个算是一个大招,有效。不过自己也被杀死了。
kill -9 $(ps -ef | grep redis)
# 正确的退出程序
kill -15 pid
这种方式有可能被阻塞式,会杀掉相关联的进程,用 kill -9 会出现关联进程残留的问题。
操作系统会发送一个 SIGTERM 信号给对应的程序,程序接收到后:
- 当前程序立刻停止;
- 程序释放相应资源,然后再停止;
- 程序可能仍然继续运行。
# 查看所有信号
kill -l # 有 64 个信号
只有第 9 种信号 (SIGKILL) 才可以无条件终止进程,其他信号进程都有权利忽略。
1 | 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL |
# 9 种 kill 信号
1 | HUP 1 终端断线 |