-
-
-
查看进程
- w 命令 帮助我们快速了解系统中目前有哪些用户登录着,以及他们在干什么。
root@hcss-ecs-c2b8:~# w 21:08:09 up 5 days, 20:55, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 125.69.15.242 20:06 0.00s 0.01s 0.00s w root@hcss-ecs-c2b8:~# 21:08:09 up 5 days, 20:55, 1 user, load average: 0.00, 0.00, 0.00 表示当前系统已经开机运行的时间,我这台服务器已经运行了5天21小时没有关机了,只有一个用户,3个值分别表示“1分钟的平均负载”,“5分钟的平均负载”,“15分钟的平均负载” USER:表示登录的用于 TTY:登录的终端名称为pts/0 FROM:连接到服务器的ip地址 LOGIN@:登录时间 IDLE:用户有多久没有活跃了 JCPU:该终端所有相关的进程使用的 CPU 时间,每当进程结束就停止计时,开始新的进程则会重新计时 PCPU:表示 CPU 执行当前程序所消耗的时间,当前进程就是在 WHAT 列里显示的程序 WHAT:表示当下用户正运行的程序是什么,这里我运行的是 w- ps 命令
用于显示当前系统中的进程, ps 命令显示的进程列表不会随时间而更新,是静态的,是运行 ps 命令那个时刻的状态或者说是一个进程快照。
root@hcss-ecs-c2b8:/var/test# ps PID TTY TIME CMD 43338 pts/0 00:00:00 bash 43474 pts/0 00:00:00 ps PID:进程号,每个进程都有唯一的进程号 TTY:进程运行所在的终端 TIME:进程运行时间 CMD:产生这个进程的程序名,如果在进程列表中看到有好几行都是同样的程序名,那么就是同样的程序产生了不止一个进程- top 命令
获取进程的动态列表
root@hcss-ecs-c2b8:/var/test# top top - 22:51:29 up 5 days, 22:38, 1 user, load average: 0.01, 0.28, 0.21 Tasks: 150 total, 1 running, 149 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 1783.4 total, 71.0 free, 437.7 used, 1274.7 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1146.4 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28 root 20 0 0 0 0 S 0.3 0.0 0:00.24 khungtaskd 1 root 20 0 167836 13132 8244 S 0.0 0.7 0:06.44 systemd 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 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gptop - 07:20:07 up 25 days, 10:41, 1 user, load average: 0.30, 0.10, 0.07相当w命令的第一行的信息。- 展示的这些进程是按照使用处理器
%CPU的使用率来排序的。
4. kill 命令
结束一个进程,
kill + PID。kill 956 # 结束进程号为956的进程 kill 956 957 # 结束多个进程 kill -9 7291 # 强制结束进程- 学到这里,我想到了再之前的开发中涉及到,当我们需要启动一个http服务器时,这时可能我们需要的端口号会被占用,这时我们不得不先用
lsof -t -i:8081找到这个端口号对应的pid有哪些,在使用kill命令将对应pid的进程结束掉
# 检查输入参数 if [ "$#" -ne 1 ]; then echo "用法: $0 <端口号>" exit 1 fi Port=$1 # 获取对应端口的pid列表 PidList=$(lsof -t -i:$Port) if [ -z "$PidList" ];then echo "没有找到'$Port' 对应的进程pid" exit 1 fi # 用循环去结束对应进程 for Pid in "$PidList" do Res=$(kill -9 "$Pid") if [ $Res -eq 0 ];then echo "已结束'$Pid'进程." else echo "无法结束进程'$Pid'." fi done这个脚本执行之后,我们的目标端口就被释放了,就可以允许我们需要的服务程序.
思考:这个可以作为服务端自动化部署脚本的其中启动服务前需要做的一部分操作,正常情况下我们要释放的端口一般是我们之前在跑着的服务器,不能直接这样结束掉进程,不然会对难以保证结束进程时正在交互的数据的正确性,应该使用优雅关闭的方式将对应的pid进行关闭,在释放端口,在启动新的服务
-
-
Linux学习 进程 端口
最新推荐文章于 2024-12-24 09:55:12 发布
8万+

被折叠的 条评论
为什么被折叠?



