进程管理
静态监控 - ps
ps - report a snapshot of the current processes.
报告当前进程的快照。
-e
Select all processes. Identical(完全相同的) to -A.
-f
Do full-format listing.
1 2 3 4 5 6 7 8 9 10 11 12
| [zhangsan@localhost ~]$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 01:36 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --sy root 2 0 0 01:36 ? 00:00:00 [kthreadd] root 4 2 0 01:36 ? 00:00:00 [kworker/0:0H] root 6 2 0 01:36 ? 00:00:00 [ksoftirqd/0] root 7 2 0 01:36 ? 00:00:00 [migration/0] root 8 2 0 01:36 ? 00:00:00 [rcu_bh] root 9 2 0 01:36 ? 00:00:01 [rcu_sched] root 10 2 0 01:36 ? 00:00:00 [lru-add-drain] root 11 2 0 01:36 ? 00:00:00 [watchdog/0] ...
|
动态监控 - top
display Linux processes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [zhangsan@localhost test]$ top
top - 15:56:13 up 1:08, 1 user, load average: 0.06, 0.02, 0.00 Tasks: 257 total, 2 running, 255 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.2 us, 0.3 sy, 0.0 ni, 98.2 id, 0.2 wa, 0.2 hi, 0.0 si, 0.0 st MiB Mem : 3710.0 total, 1366.1 free, 1125.2 used, 1218.6 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 2328.8 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2347 zhangsan 20 0 4132320 357460 118856 S 4.3 9.4 1:09.40 gnome-shell 2906 zhangsan 20 0 537584 49324 35264 S 1.0 1.3 0:08.82 gnome-terminal- 1 root 20 0 252684 15052 9592 S 0.3 0.4 0:02.74 systemd 2397 zhangsan 20 0 1152752 51468 38224 S 0.3 1.4 0:00.49 Xwayland 2662 zhangsan 20 0 536416 42968 35364 S 0.3 1.1 0:22.03 vmtoolsd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rc
|
向进程发送信号 - kill
支持信号列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [zhangsan@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
|
主要理解TERM信号和KILL信号
终止进程 - SIGTERM
TERM:该信号可由进程捕获,使用该信号让进程有机会在退出之前做好清理工作,从而体面地终止。
1
| kill -SIGTERM 939 或 kill -TERM 939 或 kill -15 939 或 kill 939
|
杀死进程 - SIGKILL
KILL:该信号不能被进程捕捉和忽略,它向系统管理员提供了一种可靠地杀死任何进程的方法。
1
| kill -SIGKILL 939 或 kill -KILL 939 或 kiil -9 939
|
后台运行 - nohup
后台运行(接收TERM)
nohup : no hang up 不挂起,用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
默认会在当前目录输出一个nohup.out文件,如果当前目录不可写,输出重定向到$HOME/nohup.out文件中。
实验脚本内容
1 2 3 4 5 6 7 8
| [zhangsan@localhost ~]$ cat write.sh #!/bin/bash while true do echo $(date +%F%n%T) " hello ">> hello.txt sleep 5s
done
|
后台运行
使用nohup command & 使其后台运行
1 2 3
| [zhangsan@localhost ~]$ nohup ./write.sh & [1] 5996 nohup: ignoring input and appending output to 'nohup.out'
|
查询脚本运行状态
1 2 3 4
| [zhangsan@localhost ~]$ ps aux|grep write.sh zhangsan 5996 0.0 0.0 12724 2924 pts/0 S 03:44 0:00 /bin/bash ./write.sh zhangsan 6026 0.0 0.0 12136 1068 pts/0 S+ 03:44 0:00 grep --color=auto write.sh
|
查看脚本结果
1 2 3 4 5 6 7 8 9 10 11 12
| # 查看写入的文件内容 [zhangsan@localhost ~]$ tail -n 10 hello.txt 2021-11-15 03:28:29 hello 2021-11-15 03:28:34 hello 2021-11-15 03:28:39 hello 2021-11-15 03:28:44 hello 2021-11-15 03:28:49 hello 2021-11-15 03:28:54 hello 2021-11-15 03:28:59 hello 2021-11-15 03:29:04 hello 2021-11-15 03:29:09 hello 2021-11-15 03:29:14 hello
|
终止进程
1 2 3
| # 向后台运行的脚本发送终止信号,让其体面的退出 [zhangsan@localhost ~]$ kill 5996 [1]+ Terminated nohup ./write.sh
|
可以通过ps命令查询到该进程已被终止。
后台运行(忽略TERM)
1 2 3 4 5 6 7 8 9
| #!/bin/bash # 加入下面一行,忽略TERM信号 trap " " TERM while true do echo $(date +%F%n%T) " hello ">> hello.txt sleep 5s
done
|
后台运行
1 2 3 4
| [zhangsan@localhost ~]$ nohup ./write.sh & [1] 6339 nohup: ignoring input and appending output to 'nohup.out'
|
查询脚本运行状态
1 2 3 4
| [zhangsan@localhost ~]$ ps aux|grep write.sh zhangsan 6339 0.0 0.0 12724 3064 pts/0 S 04:02 0:00 /bin/bash ./write.sh zhangsan 6371 0.0 0.0 12136 1172 pts/0 S+ 04:02 0:00 grep --color=auto write.sh
|
终止进程
1 2
| [zhangsan@localhost ~]$ kill 6339
|
查询脚本运行状态
1 2 3
| [zhangsan@localhost ~]$ ps aux|grep write.sh zhangsan 6339 0.0 0.0 12724 3092 pts/0 S 04:02 0:00 /bin/bash ./write.sh zhangsan 6400 0.0 0.0 12136 1044 pts/0 S+ 04:02 0:00 grep --color=auto write.sh
|
发现该进程没有体面的退出,仍在后台运行。
强制杀死进程
发送杀死信号,它不体面,你帮他体面体面。
1 2
| [zhangsan@localhost ~]$ kill -KILL 6339 [1]+ Killed nohup ./write.sh
|
再次查询脚本运行状态
1 2
| [zhangsan@localhost ~]$ ps aux|grep write.sh zhangsan 6611 0.0 0.0 12136 1172 pts/0 R+ 04:05 0:00 grep --color=auto write.sh
|
再次查询,发现该进程被强制体面了。
查看打开的文件 - lsof
lsof - list open files
lsof filename 显示打开指定文件的所有进程
-c string 显示COMMAND列中包含指定字符的进程所有打开的文件
-u zhangsan 显示所属user进程打开的文件
-p 393 根据PID列出打开文件
-i :22 查看22端口现在运行的情况
-g gid 显示归属gid的进程情况
使用示例
文件
显示打开write.sh的所有进程
1 2 3
| [zhangsan@localhost ~]$ lsof write.sh COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME write.sh 9565 zhangsan 255r REG 8,3 101 17424983 write.sh
|
COMMAND列中包含某字符的行
COMMAND列中包含write的行
1 2 3 4 5 6 7 8 9 10 11 12 13
| [zhangsan@localhost ~]$ lsof -c write COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME writeback 45 root cwd unknown /proc/45/cwd (readlink: Permission denied) writeback 45 root rtd unknown /proc/45/root (readlink: Permission denied) writeback 45 root txt unknown /proc/45/exe (readlink: Permission denied) writeback 45 root NOFD /proc/45/fd (opendir: Permission denied) write.sh 9565 zhangsan cwd DIR 8,3 4096 17425438 /home/zhangsan write.sh 9565 zhangsan rtd DIR 8,3 233 128 / write.sh 9565 zhangsan txt REG 8,3 1150736 50725009 /usr/bin/bash write.sh 9565 zhangsan mem REG 8,3 2586930 33857713 /usr/lib/locale/en_US.utf8/LC_COLLATE write.sh 9565 zhangsan mem REG 8,3 3167976 431987 /usr/lib64/libc-2.28.so write.sh 9565 zhangsan mem REG 8,3 28816 431989 /usr/lib64/libdl-2.28.so write.sh 9565 zhangsan mem REG 8,3 208616 431889 /usr/lib64/libtinfo.so.6.1
|
所属主
显示所属主为zhangsan的进程所打开的文件
1 2 3 4 5 6
| [zhangsan@localhost ~]$ lsof -u zhangsan |head -n 5 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 2275 zhangsan cwd DIR 8,3 233 128 / systemd 2275 zhangsan rtd DIR 8,3 233 128 / systemd 2275 zhangsan txt REG 8,3 1588952 1067907 /usr/lib/systemd/systemd systemd 2275 zhangsan mem REG 8,3 147064 506448 /usr/lib64/libnl-3.so.200.26.0
|
进程号
显示9565号进程所打开的文件
1 2 3 4 5 6 7 8 9 10 11 12
| [zhangsan@localhost ~]$ lsof -p 9565 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME write.sh 9565 zhangsan cwd DIR 8,3 4096 17425438 /home/zhangsan write.sh 9565 zhangsan rtd DIR 8,3 233 128 / write.sh 9565 zhangsan txt REG 8,3 1150736 50725009 /usr/bin/bash write.sh 9565 zhangsan mem REG 8,3 3167976 431987 /usr/lib64/libc-2.28.so write.sh 9565 zhangsan mem REG 8,3 278504 431980 /usr/lib64/ld-2.28.so write.sh 9565 zhangsan mem REG 8,3 286 50605560 /usr/lib/locale/en_US.utf8/LC_MONETARY write.sh 9565 zhangsan 0w CHR 1,3 0t0 2051 /dev/null write.sh 9565 zhangsan 1w REG 8,3 28 17425007 /home/zhangsan/nohup.out write.sh 9565 zhangsan 2w REG 8,3 28 17425007 /home/zhangsan/nohup.out write.sh 9565 zhangsan 255r REG 8,3 101 17424983 /home/zhangsan/write.sh
|
端口
查看22端口现在运行的情况
1 2 3 4 5 6 7 8 9
| ls[root@localhost ~]# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1102 root 3u IPv4 28299 0t0 TCP *:ssh (LISTEN) sshd 1102 root 4u IPv6 28301 0t0 TCP *:ssh (LISTEN) sshd 9079 root 3u IPv4 65146 0t0 TCP localhost.localdomain:ssh->192.168.174.1:50576 (ESTABLISHED) sshd 9087 zhangsan 3u IPv4 65146 0t0 TCP localhost.localdomain:ssh->192.168.174.1:50576 (ESTABLISHED) [root@localhost ~]# lsof -i :3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 1743 mysql 21u IPv6 30634 0t0 TCP *:mysql (LISTEN)
|