Linux学习 进程 端口

      1. 查看进程

        1. 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 
        
        1. 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:产生这个进程的程序名,如果在进程列表中看到有好几行都是同样的程序名,那么就是同样的程序产生了不止一个进程  
        
        
        
        1. 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_gp  
        
        • top - 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 # 强制结束进程  
        
        1. 学到这里,我想到了再之前的开发中涉及到,当我们需要启动一个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进行关闭,在释放端口,在启动新的服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值