zoukankan      html  css  js  c++  java
  • 【命令】kill命令

    kill命令详解:

      <---用于向进程发送信号,以实现对进程的管理--->

      语法格式:kill  [-s signal|-SIGNAL]  pid...

           kill -l [signal]

      其语法格式最终为:kill [参数] 进程号



    1、命令功能:

      发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程

      使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的所有进程,非root用户只能影响自己的进程

    2、命令参数:

      -l  信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称

      -a  当处理当前进程时,不限制命令名和进程号的对应关系

      -p  指定kill 命令只打印相关进程的进程号,而不发送任何信号

      -s  指定发送信号

      -u  指定用户 

    3、注意事项:

      · kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如:

                kill -2 123,它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号

      · kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息。

      · 可以向多个进程发信号或终止它们。

      · 当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。

      · 应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动                    多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。

    4、每个信号的标识方式: 

      1) 信号的数字标识;
      2) 信号的完整名称;
      3) 信号的简写名称;

    5、使用示例:

    示例1:列出所有信号名称:

     1 [root@test1 ~]# kill -l
     2  1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
     3  6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
     4 11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
     5 16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
     6 21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
     7 26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
     8 31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
     9 38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
    10 43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
    11 48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
    12 53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
    13 58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
    14 63) SIGRTMAX-1    64) SIGRTMAX    
    15 [root@test1 ~]# 

    说明:只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 下面是常用的信号:

      HUP    1    终端断线(无须关闭进程而让其重读配置文件)

      INT     2    终止正在运行的进程(Ctrl+C)

      QUIT    3    退出(同 Ctrl + )

      TERM   15    终止运行中的程序,这是友好终止

      KILL    9    杀死运行中的进程,这是强制终止

      CONT   18    继续(与STOP相反, fg/bg命令)

      STOP    19    暂停(同 Ctrl + Z)

    示例2:实例2:得到指定信号的数值

    [root@test1 ~]# kill -l HUP
    1
    [root@test1 ~]# kill -l INT
    2
    [root@test1 ~]# 

    示例3:先用ps查找进程,然后kill杀掉

      # ps -ef|grep vim

      # kill PID

    [root@test1 ~]# ps -ef|grep vim 
    root
    3268 2884 0 16:21 pts/1 00:00:00 vim install.log
    root
    3370 2822 0 16:21 pts/0 00:00:00 grep vim
    [root@test1 ~]# kill
    3268
    [root@test1 ~]# kill
    3268
    -bash: kill: (3268) - 没有那个进程
    [root@test1 ~]#

    示例4:彻底杀死进程

    【方法一:直接发送信号9彻底杀死】

    # ps -ef|grep vim
    # kill -9 PID
    [root@test1 ~]# ps -ef|grep vim 
    root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log 
    root 3370 2822 0 16:21 pts/0 00:00:00 grep vim 
    [root@test1 ~]# kill -9 3268 
    [root@test1 ~]# kill 3268 
    -bash: kill: (3268) - 没有那个进程 
    [root@test1 ~]#

    【方法二:直接杀死该进程的父进程】

    示例5:彻底杀死指定用户的所有进程

      # kill -9 $(ps -ef | grep username)

    示例6:init进程是不杀的

      # kill -9 1

    [root@localhost ~]# ps -ef|grep init
    root         1     0  0 Nov02 ?        00:00:00 init [3]                  
    root     17563 17534  0 17:37 pts/1    00:00:00 grep init
    [root@test1 ~]# kill -9 1
    [root@ltest1 ~]# kill -HUP 1
    [root@test1 ~]# ps -ef|grep init
    root         1     0  0 Nov02 ?        00:00:00 init [3]                  
    root     17565 17534  0 17:38 pts/1    00:00:00 grep init
    [root@test1 ~]# kill -KILL 1
    [root@test1 ~]# ps -ef|grep init
    root         1     0  0 Nov02 ?        00:00:00 init [3]                  
    root     17567 17534  0 17:38 pts/1    00:00:00 grep init
    [root@test1 ~]#

    说名:init是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。 其它所有进程都是init进程的子孙。init进程是不可杀的!

     

  • 相关阅读:
    pip命令提示unknow or unsupported command install解决方法
    SSH登录慢解方案
    python/shell脚本报异常^M: bad interpreter: No such file or directory
    MySQL中自增ID起始值修改方法
    Centos给文件设置了777权限仍不能访问解决方案
    CentOS7下安装mysql5.7
    CentOS7下使用yum安装MariaDB
    sublime text 3启动报错"swallow_startup_errors"解决方法
    一个清除数组的方法在 Kotlin、Java、C#和Nim上的性能测试
    国外立交桥设计参考资料
  • 原文地址:https://www.cnblogs.com/l75790/p/9192657.html
Copyright © 2011-2022 走看看