每天一个Linux命令(37)kill命令

时间:2023-03-10 06:20:37
每天一个Linux命令(37)kill命令

      Linux中的kill命令用来终止指定的进程(terminate a process)的运行。 kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。

  (1)用法:

      用法:  kill  [选项]  参数

参数指的是进程或作业识别号,指定要删除的进程或作业。

(2)功能:

      功能:  发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程 。

若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。

root用户将影响用户的进程,非root用户只能影响自己的进程。

(3)选项参数:

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

2) -l <信息编号>:      若不加<信息编号>选项,则-l参数会列出全部的信息名称

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

4) -s <信息名称或编号>:   指定要送出的信息

    (4)实例:

1)[sunjimeng@localhost ~]$ kill -l            列出所有的信号

[sunjimeng@localhost ~]$ kill -l
) SIGHUP ) SIGINT ) SIGQUIT ) SIGILL ) SIGTRAP
) SIGABRT ) SIGBUS ) SIGFPE ) SIGKILL ) SIGUSR1
) SIGSEGV ) SIGUSR2 ) SIGPIPE ) SIGALRM ) SIGTERM
) SIGSTKFLT ) SIGCHLD ) SIGCONT ) SIGSTOP ) SIGTSTP
) SIGTTIN ) SIGTTOU ) SIGURG ) SIGXCPU ) SIGXFSZ
) SIGVTALRM ) SIGPROF ) SIGWINCH ) SIGIO ) SIGPWR
) SIGSYS ) SIGRTMIN ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+14 ) SIGRTMIN+ ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX

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

HUP       终端断线
INT 中断(同 Ctrl + C)
QUIT 退出(同 Ctrl + \)
TERM 终止
KILL 强制终止
CONT 继续(与STOP相反, fg/bg命令)
STOP 暂停(同 Ctrl + Z)

2)[sunjimeng@localhost ~]$ kill 3429              查找并删除命令

[sunjimeng@localhost ~]$ ps -ef |grep "/usr/bin/seapplet"
sunjime+ : ? :: /usr/bin/seapplet
sunjime+ : pts/ :: grep --color=auto /usr/bin/seapplet
[sunjimeng@localhost ~]$ kill
[sunjimeng@localhost ~]$ kill
bash: kill: () - 没有那个进程
[sunjimeng@localhost ~]$ kill
bash: kill: () - 没有那个进程
[sunjimeng@localhost ~]$ ps -ef |grep "/usr/bin/seapplet"
sunjime+ : pts/ :: grep --color=auto /usr/bin/seapplet

注意在测试时尽量不要删除root的进程。

3)[sunjimeng@localhost ~]$ kill -l KILL             显示指定信号的数值

[sunjimeng@localhost ~]$ kill -l KILL

[sunjimeng@localhost ~]$ kill -l TERM

4)[sunjimeng@localhost ~]$ kill -9 $(ps -ef |grep sunjimeng) 删除指定用户的所有进程

[sunjimeng@localhost ~]$ kill -u sunjimeng
bash: kill: u: 无效的信号声明

-u参数不能用了。删除指定用户的所有进程用下面的命令:    

[sunjimeng@localhost ~]$ kill - $(ps -ef |grep sunjimeng)

5)[sunjimeng@localhost ~]$ kill -9 1              杀死init进程

[sunjimeng@localhost ~]$ kill -
bash: kill: () - 不允许的操作
[sunjimeng@localhost ~]$

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

      (5)其他:

Linux进程的管理:

进程是Linux系统中一个非常重要的概念。Linux是一个多任务的操作系统,系统上经常同时运行着多个进程。我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务。 
  Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。

1)交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。

2)批处理进程和终端没有联系,是一个进程序列。

3)监控进程(也称系统守护进程)时Linux系统启动时启动的进程,并在后台运行。例如,httpd是著名的Apache服务器的监控进程。 
    kill命令的工作原理是:

向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。