Linux进程管理
1、进程管理简介
1.1 进程
进程是正在执行当中的程序(命令),每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
- 程序被执行时,执行人的权限和属性、以及程序的代码都会被加载入内存,操作系统就会给这个进程分配一个ID号,我们称为PID(进程ID)。
1.2 程序
程序是人使用计算机语言编写的可以实现特定目的或解决特定问题的代码集合。
- 使用计算机语言编写
- 可以执行
- 实现一定功能的代码
1.3 进程管理的作用
- 判断服务器健康状态
- 查看系统中所有的进程
- 杀死进程
2、进程的查看
2.1 ps命令
静态显示系统中的进程
ps aux
// 查看系统中所有进程,使用BSD操作系统格式
// 示例
[root@JLin ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 242608 11152 ? Ss 7月06 0:02 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S 7月06 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 7月06 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 7月06 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< 7月06 0:00 [kworker/0:0H-kblockd]
ps -ef
// 查看系统中所有进程,使用Linux标准命令格式
a:显示一个终端的所有进程,除了会话引线
u:最小进程的归属用户及内存的使用情况
×:显示没有控制终端的进程
-e #显示所有进程,与-A效果相同
-l #以长格式显示
-F #显示更详细的完整格式的进程信息
-f #显示更详细的完整格式的进程信息
-H #以进程层级格式显示进程相关信息
-o #根据自己的需要选择要显示的字段
// 示例
[root@JLin ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 7月06 ? 00:00:02 /usr/lib/systemd/systemd --switched-root
root 2 0 0 7月06 ? 00:00:00 [kthreadd]
root 3 2 0 7月06 ? 00:00:00 [rcu_gp]
root 4 2 0 7月06 ? 00:00:00 [rcu_par_gp]
root 6 2 0 7月06 ? 00:00:00 [kworker/0:0H-kblockd]
2.2 pstree命令
pstree命令将所有进程以树状图显示
pstree
-p:显示进程的PID
-u:显示进程的所属用户
// 示例
[root@JLin ~]# pstree
systemd─┬─AliYunDun───24*[{AliYunDun}]
├─AliYunDunUpdate───5*[{AliYunDunUpdate}]
├─NetworkManager───2*[{NetworkManager}]
├─2*[agetty]
├─aliyun-service───6*[{aliyun-service}]
├─assist_daemon───7*[{assist_daemon}]
// 如果没有pstree命令,使用下面命令安装
yum -y install psmisc
2.3 pidof命令
根据进程名查PID号
pidof [进程名]
2.4 top命令
实时查看进程,类似于windows的任务管理器
语法:top [选项]
选项:
-d 秒速:指定top命令每隔几秒更新,默认是3秒
-n 次数:指定top命令执行的次数,一般和“-b”合用
-b 使用批处理模式输出,一般和“-n”选项合用,用于把top命令重定向到文件中
-p 指定PID,之查看某个PID的进程
-s 使top在安全模式运行,避免在交互模式种出现错误
-u 用户名:只监听某个用户的进程
// 示例:
[root@JLin ~]# top
top - 17:09:34 up 1 day, 1:20, 2 users, load average: 0.09, 0.08, 0.03
Tasks: 106 total, 2 running, 104 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.7 us, 6.4 sy, 0.0 ni, 87.0 id, 0.0 wa, 1.0 hi, 0.0 si, 0.0 st
MiB Mem : 1818.6 total, 479.3 free, 666.4 used, 672.9 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1002.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1075 root 10 -10 228332 82252 15840 S 3.7 4.4 23:27.79 AliYunDun
225855 root 20 0 157268 6344 4712 S 0.7 0.3 0:00.65 sshd
705 root 16 -4 150756 2856 2020 S 0.3 0.2 0:05.91 auditd
851 root 20 0 224996 40792 39060 S 0.3 2.2 0:24.62 sssd_nss
14910 root 20 0 3048840 467968 30132 S 0.3 25.1 4:15.79 java
1 root 20 0 242608 11152 8392 S 0.0 0.6 0:02.83 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
// 只查看PID为1075的进程
[root@JLin ~]# top -p 1075
top - 17:10:40 up 1 day, 1:21, 2 users, load average: 0.03, 0.06, 0.02
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 6.4 us, 6.4 sy, 0.0 ni, 85.5 id, 0.3 wa, 1.4 hi, 0.0 si, 0.0 st
MiB Mem : 1818.6 total, 481.3 free, 664.3 used, 673.0 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1004.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1075 root 10 -10 228332 82252 15840 S 4.7 4.4 23:30.45 AliYunDun
// 让top命令只执行一次,然后把结果保存到top.log文件中
[root@JLin ~]# top -n 1 -b > /root/top.log
[root@JLin ~]# less top.log
top - 17:11:30 up 1 day, 1:22, 2 users, load average: 0.09, 0.06, 0.02
Tasks: 106 total, 2 running, 104 sleeping, 0 stopped, 0 zombie
%Cpu(s): 6.2 us, 6.2 sy, 0.0 ni, 87.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1818.6 total, 479.7 free, 665.8 used, 673.1 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1003.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1075 root 10 -10 228332 82252 15840 S 6.7 4.4 23:32.73 AliYunDun
1 root 20 0 242608 11152 8392 S 0.0 0.6 0:02.84 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
2.5 vmstat命令
vmstat 命令监控系统资源
vmstat [刷新延迟] [刷新次数]
[root@JLin ~]# vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 492696 2104 686820 0 0 7 7 66 399 2 2 96 0 0
0 0 0 492472 2104 686820 0 0 0 0 744 1625 3 4 93 0 0
0 0 0 493016 2104 686828 0 0 0 0 873 2380 8 10 82 0 0
3、经常管理
3.1 发送信号管理进程
kill命令发送信号来管理进程
[root@JLin ~]# 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 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
3.2 kill命令
使用信号管理进程
// 语法:
kill [-信号] PID
// 使用kill -1 信号让PID为2246的进程重启
[root@JLin ~]# kill -1 2246
// 使用kill -19信号,让vim进程暂停
[root@JLin ~]# vi test.sh
// 查看这个进程的状态s(休眠)和+(位于后台)
[root@JLin ~]# ps aux | grep "vi" l grep -v "grep"
root 2313 0.0 0.2 7116 1544 pts/1 S+19:20 0:00 vi test.sh
// 使用-19让PID是2313的进程暂停
[root@JLin ~]# kill -19 2313
// 进程的状态变成了T(暂停)状态
[root@JLin ~]# ps aux | grep "vi" l grep -v "grep"
root 2313 0.0 0.2 71161580 pts/1 T 19:20 0:00 vi test.sh
3.3 killall命令
killall后面加进程名,表示将匹配到的以进程名为名的进程全部杀死
// 语法
[root@JLin ~]# killall[选项][信号] [进程名]
// 选项:
-i:交互式,询问是否要杀死某个进程
-I:忽略进程名的大小写
// 示例
// 杀死进程名为sleep的所有进程
[root@JLin ~]# ps -eflgrep sleep
root 1914 1272 0 19:58 pts/0 00:00:80 sleep 100eroot 1915 1272 0 19:58 pts/0 0o:00:00 sleep 50oroot 1916 1272 0 19:58 pts/0 0o:00:00 sleep 700
root 1920 1272 0 19:58 pts/0 00:00:00 grep --color=auto sleep[ root@localhost ~]# killall sleep
[1] Terminated sleep 100o
[2]- Terminated sleep 5oo[3]+Terminated sleep 700
[root@JLin ~]# ps -ef | grep sleep
root 1923 12720 19:58 pts/0 00:0o:00 grep --color=auto sleep
4、查看cpu核心数
配置文件/proc/cpuinfo存放着cpu信息
// 查询结果有几行,cpu就有凡核
[root@JLin ~]# grep 'model name' /proc/cpuinfo
model name : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
5、服务控制的方式
Rhel6 及其以前的版本
service SERVICE_NAME start
service SERVICE_NAME stop
service SERVICE_NAME status
service SERVICE_NAME restart
chkconfig --add SERVICE_NAME
chkconfig SERVICE_NAME on
chkconfig SERVICE_NAME off
Rhel7 及其以后的版本
systemctl start SERVICE_NAME
systemctl stop SERVICE NAME
systemctl status SERVICENAME
systemctl restart SERVICE NAME
systemctl enable SERVICENAME
systemctl disable SERVICE_NAME