当前位置:   article > 正文

Linux中_使用ps_-ef_grep_fuser_命令_查看进程_及使用kill_kill_-9_killall_pkill杀死进程_ps -ef 杀进程

ps -ef 杀进程

1、查看指定名称的进程,如下查看运行wps程序的进程:

ps命令查找与进程相关的PID号:

    ps -ef | grep wps | grep -v grep
  • 1
  • 2
  • 3

2、杀死进程:

1、命令参数说明:

    1、管道符 "|" 用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。

    2、"ps -ef" 是 查看所有进程
        Unix操作系统在操作风格上主要分为System V和BSD。
        
        其中 "ps -aux" 也是查看所有进程 不过两者右以下区别:

                        (1)-ef是System V展示风格,而-aux是BSD风格

                        (2)COMMADN列如果过长,-aux会截断显示,而-ef不会

                        (3)-aux可以查看进程的CPU占用率和内存占用率,而-ef不能
                        
    3、 "grep GSM_run.py" 列出含有关键字"GSM_run.py"的所有进程

    4、"grep -v grep"是在列出的进程中过滤去除含有关键字"grep"的命令本身的进程.

    5、"cut -c 9-15"是截取输入行的第9个字符到第15个字符,而这正好是进程号PID.

        某些情况下 9-15 是 不够的 可以 写成 "awk '{print $2}'" 其 表示 按空格分割取第二个元素,即取进程号 PID。
    
    6、"$2" 表示第2列,即进程号PID;    
        
    7、"xargs kill -9" xargs命令把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行.
    
    8、"kill" 命令杀死指定进程PID的进程.
    
    9、"kill -9 PID" 强制杀死进程。(有些进程可能杀不死,就加个-9参数,强制将其杀死)
    
    10、"kill -9 PID1 PID2 PID3 ..."杀死多个进程,在命令 kill -9 后面跟多个进程的PID号即可。(进程号之间以空格隔开)

    
    11、"sudo killall python3" 命令用于杀死指定名字的进程.
    
    12、"sudo pkill python3" 命令杀死所有python3执行的程序。
    
    13、"|sh" ,表示执行打印出来的这些命令,进而达到杀死进程名中包含xx字段的进程。
    
    14、"awk '{print $2}'" 表示输出第二列的进程PID。
    
    15、"awk  '{print "kill -9 " $2}'"  列出了所有要杀死的进程,并将之打印在了屏幕上。
    
    16、"pidlist=`ps -ef |grep tomcat |grep -v grep|awk '{print $2}'`" 将需要杀死的进程号赋值给变量

    17、"kill -9 $pidlist" 再使用命令 kill -9 杀死他们
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

2、使用示例:

    1、根据进程PID号杀死进程:
        1、根据进程号(PID)杀死进程:第二列显示的就是进程号

            kill 命令杀死指定进程PID的进程

                kill PID
        
        2、强制杀死进程。(有些进程可能杀不死,就加个-9参数,强制将其杀死)

            kill -9 PID
        
        3、杀死多个进程,在命令 kill -9 后面跟多个进程的PID号即可。(进程号之间以空格隔开)

            kill -9 PID1 PID2 PID3 ...



    2、强制杀死某个端口号下的所有进程。
        示例:杀死tcp端口8080下的所有进程

        sudo fuser -k -n tcp 8080  
        
        fuser用于通过文件或端口号识别进程。
        
        
        
    3、杀死某个命令下的所有进程
        
        1、实例1:使用 killall 命令杀死所有python3 执行的程序: 
            killall [参数] [进程名] 

            killall 命令用于杀死指定名字的进程(kill processes by name)

                sudo killall python3
        
        注意:一般情况下,不会采用该方法去批量杀死进程,因为此方法可能会造成误杀。

        2、实例2:使用 pkill 命令杀死所有python3执行的程序: 
            pkill [参数] [进程名] 

            pkill 命令与 killall 命令相同,同样用于杀死指定名字的进程(kill processes by name)

            sudo pkill python3
            
        
            
    4、杀死进程名中含有xxx字段的所有进程
        1、实例:杀死进程名中含 ‘AI_server’ 字段的所有进程(不推荐)

            ps -def | grep 'AI_server' | cut -c 9-15 | xargs kill -9
        
            已经成功杀死了所有进程名中包含‘AI_srever’字段的所有进程
        
            命令详解:
                1、 ps -ef |grep 'AI_server' 
                    这个命令会查出所有进程名字中含有‘AI_server’字段的进程。
                    
                2、cut 9-15 
                    从输出结果的每行字符串中截取第9-15个字符, 刚好就是我们所需的进程号。
                3、xargs kill -9 
                    命令 xargs 是将前面提取到的所有的进程号,作为参数传给命令 kill -9 , 这样我们就能杀死所有的进程。( xargs kill -9 中的 xargs 命令是用来把前面命令的输出结果(PID)作为 kill -9 命令的参数,并执行该令)
                
                
                
        2、方法进阶,优化方法杀死进程名中含 ‘AI_server’ 字段的所有进程(不推荐):
            
            ps -ef | grep LOCAL=NO | grep -v grep | cut -c 9-15 | xargs kill -9

            注意:(参照方法三中的批量杀死进程的执行结果)使用 ps -ef | grep xxx 命令根据进程名中的字段查找进程ID的时候,同时会包含含有关键字《grep》的进程。
            
            解决办法: 
                1、 ps -ef |grep 'LOCAL=NO' 
                        这个命令会查出所有进程名字中含有‘LOCAL=NO’字段的进程。
                2、grep -v grep 是在列出的进程中去除含有关键字 grep 的进程。
                3、cut 9-15 
                        从输出结果的每行字符串中截取第9-15个字符, 刚好就是我们所需的进程号。
                4、xargs kill -9 
                    命令 xargs 是将前面提取到的所有的进程号,作为参数传给命令 kill -9 , 这样我们就能杀死所有的进程。( xargs kill -9 中的 xargs 命令是用来把前面命令的输出结果(PID)作为 kill -9 命令的参数,并执行该令)



        3、执行打印出来的这些命令,杀死进程名中包含 aaa 字段的进程。
        
            ps -ef|grep 'aaa' |grep -v grep|awk  '{print "kill -9 " $2}' |sh
            
            命令详解:
                1、ps -ef|grep 'aaa' 这个命令会查出所有进程名字中含有‘aaa’字段的进程。
                2、命令 grep -v grep 是过滤掉 grep 命令本身的进程;

                3、awk  '{print "kill -9 " $2}' 命令会列出所有要杀死的进程,并将之打印在了屏幕上。
              
                4、命令 ps -ef | grep aaa | grep -v grep|awk '{print "kill -9 "$2}'  列出了所有要杀死的进程,并将之打印在了屏幕上。
                    $2 表示第2列,即进程号PID;。
                
                5、 |sh ,表示执行打印出来的这些命令,进而达到杀死进程名中包含‘aaa’字段的进程。
        
      
        
        4、杀死进程名中包含 check_os.sh 字段的进程,并排除 grep 自身的进程,和 打印所有符合条件的进程PID,再将结果传给 kill -9 执行。
            
            ps -ef|grep 'check_os.sh' | grep -v grep | awk '{print $2}' | xargs kill -9
            1、ps -ef|grep 'check_os.sh' 这个命令会查出所有进程名字中含有‘check_os.sh’字段的进程。
            2、grep -v grep 是过滤掉 grep 命令本身的进程;
            
            3、awk '{print $2}' 表示输出所有进程的第二列的进程PID。
                $2 表示第2列,即进程号PID;。
            4、xargs kill -9 
                    命令 xargs 是将前面提取到的所有的进程号,作为参数传给命令 kill -9 , 这样我们就能杀死所有的进程。( xargs kill -9 中的 xargs 命令是用来把前面命令的输出结果(PID)作为 kill -9 命令的参数,并执行该令)    
    
    
    
        5、杀死进程名中包含 tomcat 字段的进程,将需要杀死的进程号赋值给变量,再使用命令 kill -9 杀死他们

            pidlist=`ps -ef |grep tomcat |grep -v grep|awk '{print $2}'`

            kill -9 $pidlist 
            
                1、pidlist= 将需要杀死的进程号赋值给变量 pidlist
                
                2、ps -ef|grep 'tomcat' 这个命令会查出所有进程名字中含有‘tomcat’字段的进程。
                3、命令 grep -v grep 是过滤掉 grep 命令本身的进程;

                4、awk '{print $2}' 表示输出所有进程的第二列的进程PID。
                    $2 表示第2列,即进程号PID;。
                
                5、kill -9 $pidlist  使用命令 kill -9 杀死变量 pidlist 中的进程号。
        
    
    
    
    注意:有的root进程给命令加sudo提权限是杀不掉进程的,需要切换到root用户再用命令杀进程。   
   

    
    5、杀掉defunct进程-僵尸进程:
        僵尸进程:在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。当用ps命令观察进程的执行状态时,看到这些进程的状态栏为defunct是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。
        
        1、查看系统中是否存在defunct进程:
            ps -ef | grep defunct
            
            
        2、 查看僵尸进程的ID及其父进程ID:
        
            1、查看所有僵尸进程的ID及其父进程ID:
                ps -ef | grep defunct | more

            2、查看某个僵尸进程的父进程ID
                ps -ef | grep defunct_process_pid #得到defunct进程的父进程ID
                 
                
                UID PID PPID C STIME TTY TIME CMD   条目:
                UID:用户ID
                PID:进程ID
                PPID:父进程ID
                    
            3、找到僵尸进程的父进程然后kill -9 杀死:
                需要确定僵尸进程的相关信息,比如父进程ppid、僵尸进程的pid以及命令行等信息。
                ps -e -o stat,ppid,pid,cmd | egrep '^[Zz]'
                
                说明:

                    ps:ps命令用于获取当前系统的进程信息.

                    -e:参数用于列出所有的进程

                    -o:参数用于设定输出格式,这里只输出进程的stat(状态信息)、ppid(父进程pid)、pid(当前进程的pid),cmd(即进程的可执行文件。

                    egrep:是linux下的正则表达式工具

                    '^[Zz]':这是正则表达式,表示第一个字符的位置,[Zz],表示z或者大写的Z字母,即表示第一个字符为Z或者z开头的进程数据,只所以这样是因为僵尸进程的状态信息以Z或者z字母开头。
    
                    
        3、杀死僵尸进程:
            1、重启服务器:
                sudo reboot
                
            2、通过结束父进程从而结束僵尸进程杀死父进程:

                kill -9 PPID     
                
            3、很多时候遇到僵尸进程我们不能结束父进程,比如父进程是init进程,那一旦结束父进程,整个系统就挂掉了,这时候则可以考虑挂起子进程,这相当于“曲线救国”。一个进程一旦挂起就相当于“什么都不做了”。可以通过执行如下命令来挂起进程。
                    
               kill -hup 2563   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183

3、kill命令:

kill: kill [-s 信号声明 | -n 信号编号 | -信号声明] 进程号 | 任务声明 ... 或 kill -l [信号声明]
向一个任务发送一个信号。

向以 PID 进程号或者 JOBSPEC 任务声明指定的进程发送一个以
SIGSPEC 信号声明或 SIGNUM 信号编号命名的信号。如果没有指定
SIGSPEC 或 SIGNUM,那么假定发送 SIGTERM 信号。

选项:
  -s sig	SIG 是信号名称
  -n sig	SIG 是信号编号
  -l	列出信号名称;如果参数后跟 `-l'则被假设为信号编号,
		而相应的信号名称会被列出

Kill 成为 shell 内建有两个理由:它允许使用任务编号而不是进程号,
并且在可以创建的进程数上限达到是允许进程被杀死。

退出状态:
返回成功,除非使用了无效的选项或者有错误发生。            
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

4、ps -ef命令:

用法:
    ps [选项]
        -xx
        
    ps --help <simple|list|output|threads|misc|all>'
or  ps --help <s|l|o|t|m|a>  

参数:        
-s 基本选项:
 -A, -e               所有进程
 -a                   除会话引导符外,所有都使用tty
  a                   所有都使用tty,包括其他用户
 -d                   除会话负责人外
 -N, --deselect       取消选择
  r                   仅运行进程
  T                   该终端上的所有进程
  x                   不控制ttys的进程 
  

-l 按列表选择:
 -C <命令>            命令名称
 -G, --Group <GID>    真实的组id或组名
 -g, --group <group>  会话或有效组名
 -p, p, --pid <PID>   进程编号
        --ppid <PID>  父进程编号
 -q, q, --quick-pid <PID>
                      进程id(快速模式)
 -s, --sid <session>  会话id
 -t, t, --tty <tty>   终端
 -u, U, --user <UID>  有效的用户id或名称
 -U, --User <UID>     真实用户编号或名称

  选择选项也将其作为参数:
    逗号分隔的列表。'-u root,nobody' 或
    空白分隔的列表。'-p 123 4567'     
  
  
-o 输出格式:
    -F                   超满的
    -f                   完整格式,包含命令行
    f, --forest         ascii 字符艺术显示的进程树
    -H                   显示流程层次结构
    -j                   作业的格式
    j                   BSD 任务控制格式
    -l                   长格式
    l                   BSD 长格式
    -M, Z                添加安全数据(用于 SELinux)
    -O <format>          预加载默认列
    O <format>          作为-O,具有BSD特性
    -o, o, --format <格式>
                      用户定义的格式
    s                   信号格式
    u                   面向用户的格式
    v                   虚拟内存格式
    X                   寄存器格式
    -y                  不显示标志,显示RSS和地址(与-l一起使用)
     --context        显示安全上下文(用于 SELinux)
     --headers        重复标题行,每页一个
     --no-headers     根本不打印页眉
     --cols, --columns, --width <num>
                      设置屏幕宽度
     --rows, --lines <num>
                      设置屏幕高度   
 
 
-t Show threads:
    H                   就像它们是进程一样
    -L                   可能有LWP和NLWP列
    -m, m                后处理
    -T                   可能与SPID列
     
     
-m Miscellaneous options:
    -c                   使用-l选项显示调度类
    c                   显示真正的命令名
    e                   命令后显示环境
    k,    --sort        指定排序顺序为: [+|-]key[,[+|-]key[,...]]
    L                   显示格式说明符
    n                   显示数字uid和wchan
    S,    --cumulative  包括一些死子进程数据
    -y                   不显示标志,只显示rss(仅使用-l)
    -V, V, --version     显示版本信息并退出
    -w, w                不限制输出宽度

        --help <simple|list|output|threads|misc|all>
                      显示帮助信息并退出
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86

5、fuser命令:

fuser:无效的选项 --help
fuser 显示哪些进程使用指定的文件、端口或文件系统。
用法:fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n 命名空间]
            [-k [-i] [-信号]] 名字...
      fuser -l
      fuser -V

参数:
    -a,--all              也显示未使用的文件
    -i,--interactive      杀死程序前询问 (未指定 -k 选项时被忽略)
    -I,--inode            总是使用 inode 来比较文件
    -k,--kill             杀死访问指定文件的进程
    -l,--list-signals     列出可用的信号名
    -m,--mount            显示所有使用指定文件系统或块设备的进程
    -M,--ismountpoint     只在 <名字> 为挂载点时完成要求
    -n,--namespace 空间   在指定命名空间中查找 (file、udp 或 tcp)
    -s,--silent           不输出信息
    -信号                 发送指定的 "信号" 而不是 SIGKILL
    -u,--user             显示用户 ID
    -v,--verbose          输出更多信息
    -w,--writeonly        只杀死有权写入的进程
    -V,--version          显示版本信息
    -4,--ipv4             仅查找 IPv4 套接字
    -6,--ipv6             仅查找 IPv6 套接字
    -                     重置选项

    udp/tcp 名字格式: [本地端口][,[远程主机][,[远程端口]]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/185005
推荐阅读
相关标签
  

闽ICP备14008679号