目录
本文导读
- windows上可以直接在任务管理器中查看和结束进程,Linux上则可以使用如下方式进行
查找进程
- 杀进程的第一步就是查找进程
top 命令
- top 命令 比较综合的动态显示系统进程运行情况。因为是实时显示运行情况,所以可以按"ctrl+c"退出。
- 如下所示可以看到 Mysql 的 进程PID为 1658
[root@localhost ~]# top
top - 17:08:51 up 2 min, 2 users, load average: 0.19, 0.15, 0.06
Tasks: 354 total, 2 running, 352 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1001332 total, 297624 free, 492484 used, 211224 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 345408 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
297 root 20 0 0 0 0 S 0.7 0.0 0:00.98 kworker/0:2
1658 mysql 20 0 1362156 373548 13208 S 0.7 37.3 0:02.90 mysqld
2708 root 20 0 148396 2312 1460 R 0.7 0.2 0:00.07 top
1 root 20 0 44188 6648 3948 S 0.0 0.7 0:01.72 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kworker/u256:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
ps 命令
-
ps 命令是相当强大地进程查看命令,运用该命令可以确定有哪些进程正在运行和运行地状态、进程是否结束、进程有没有僵死、哪些进程占用了过多地资源等等。
-
ps 是显示瞬间进程的状态,并不动态连续,如果想对进程进行实时监控应该用top命令。
-
该命令语法格式:ps [选项]
参数:
-A :所有的进程均显示出来,与 -e 具有同样的效用;
-a : 显示现行终端机下的所有进程,包括其他用户的进程;
-u :以用户为主的进程状态 ;
x :通常与 a 这个参数一起使用,可列出较完整信息。
- 1、查看当前运行的所有进程:
[root@localhost ~]# ps -A
PID TTY TIME CMD
1 ? 00:00:01 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd/0
6 ? 00:00:00 kworker/u256:0
7 ? 00:00:00 migration/0
946 ? 00:00:00 NetworkManager
1081 ? 00:00:00 wpa_supplicant
1082 ? 00:00:00 polkitd
1276 ? 00:00:00 dhclient
1467 ? 00:00:00 sshd
1468 ? 00:00:00 tuned
1658 ? 00:00:07 mysqld
2619 ? 00:00:00 master
2621 ? 00:00:00 pickup
.................
- 2、查看当前运行的所有进程同时显示详细信息,实际中通常使用 "-aux" 组合:
[root@localhost ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.6 44188 6652 ? Ss 17:06 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 17:06 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 17:06 0:00 [ksoftirqd/0]
root 6 0.0 0.0 0 0 ? S 17:06 0:00 [kworker/u256:0]
root 7 0.0 0.0 0 0 ? S 17:06 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 17:06 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 17:06 0:00 [rcuob/0]
root 1467 0.0 0.3 80916 3636 ? Ss 17:06 0:00 /usr/sbin/sshd -D
root 1468 0.0 1.8 555712 18444 ? Ssl 17:06 0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
mysql 1658 0.7 38.1 1362156 382236 ? Ssl 17:06 0:08 /usr/sbin/mysqld
root 2619 0.0 0.2 90380 2176 ? Ss 17:06 0:00 /usr/libexec/postfix/master -w
postfix 2621 0.0 0.4 90484 4128 ? S 17:06 0:00 pickup -l -t unix -u
postfix 2622 0.0 0.4 90552 4152 ? S 17:06 0:00 qmgr -l -t unix -u
- 3、查看指定进程,结合 grep 可以快速查找进程信息:
[root@localhost ~]# ps -aux|grep mysql
mysql 1658 0.6 38.1 1362156 382236 ? Ssl 17:06 0:09 /usr/sbin/mysqld
root 2743 0.0 0.0 112724 964 pts/0 R+ 17:28 0:00 grep --color=auto mysql
[root@localhost ~]# ps -aux|grep redis
root 2745 0.0 0.0 112724 960 pts/0 R+ 17:28 0:00 grep --color=auto redis
[root@localhost ~]# ps -aux|grep java
root 2747 0.0 0.0 112724 960 pts/0 R+ 17:28 0:00 grep --color=auto java
[root@localhost ~]# ps -A|grep java
[root@localhost ~]#
USER 进程的属主;
PID 进程的ID;
PPID 父进程;
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
NI 进程的NICE值,数值大,表示较少占用CPU时间;
VSZ 該进程使用的虚拟內存量(KB);
RSS 該進程占用的固定內存量(KB)(驻留中页的数量);
TTY 該進程在那個終端上運行(登陸者的終端位置),若與終端無關,則顯示(?)。若為pts/0等,則表示由網絡連接主機進程
WCHAN 當前進程是否正在進行,若為-表示正在進行;
START 該進程被觸發启动时间;
TIME 該进程實際使用CPU運行的时间;
COMMAND 命令的名称和参数;
lsof 命令
- 可以用 lsof 命令 查看是哪个进程打开了某个端口。比如Tomcat默认是8080,redis默认是6379、mysql默认是3306、Oracle默认是1521 等。
- 语法:lsof -i :端口号
- 当Linux没有安装 lsof 时,可以先用 "yum list lsof"查找能用的安装包,在使用 "yum install xxxx"进行安装
[root@localhost ~]# yum list lsof
已加载插件:fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.zju.edu.cn
* updates: mirrors.tuna.tsinghua.edu.cn
可安装的软件包
lsof.x86_64 4.87-5.el7
.....
[root@localhost ~]# yum install lsof.x86_64
已加载插件:fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
.....
Running transaction
正在安装 : lsof-4.87-5.el7.x86_64 1/1
验证中 : lsof-4.87-5.el7.x86_64 1/1
已安装:
lsof.x86_64 0:4.87-5.el7
完毕!
- 然后使用 “lsof -i :端口号”查看占用端口的进程
[root@localhost ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1658 mysql 20u IPv6 20161 0t0 TCP *:mysql (LISTEN)
[root@localhost ~]# lsof -i :6379
[root@localhost ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1658 mysql 20u IPv6 20161 0t0 TCP *:mysql (LISTEN)
结束进程
kill 命令
- kill 命令经常被使用,它通过发送指定信号给进程或进程组,可以用 kill -l 查看都有哪些信号。
[root@localhost ~]# 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
- 1、根据进程 pid 强制结束进程,使用上面的 -9 即可。先查询进程PID值,然后结束它
[root@localhost ~]# ps -aux|grep redis
root 3021 0.0 0.0 112724 964 pts/0 S+ 18:01 0:00 grep --color=auto redis
[root@localhost ~]# kill -9 3021
killall 命令
- killall 命令根据进程名来结束进程
[root@localhost ~]# killall redis
redis: no process found
[root@localhost ~]# killall mysql
mysql: no process found
[root@localhost ~]# killall mysqld