kill 从字面来看,就是用来杀死进程的命令,但事实上,这个或多或少带有一定的误导性。从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。
也就是说,kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。
kill 命令的基本格式如下:
[root@localhost ~]# kill [信号] PID
如果后台中有多个命令,可以用fg %jobnumber(是命令编号linux命令,不是进程号)将选中的命令调出。system()会调用fork()产生子进程, 由子进程来调用/bin/sh-c string 来执行参数string 字符串所代表的命令, 此命令执行完后随即返回原调用的进程. 在调用system()期间sigchld 信号会被暂时搁置,sigint 和sigquit 信号则会被忽略。以下是所涉及到的dos命令详解及windows常用进程:一、tasklist命令:tasklist [/s system [/u username [/p [password]]]][/m [module] | /svc | /v] [/fi filter] [/fo format] [/nh]描述:这个命令行工具显示应用程序和本地或远程系统上运行的相关任务/进程的列表。
表 1 kill命令常用信号及其含义信号编号信号名含义
EXIT
程序退出时收到该信息。
挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
如果你用的是xp系统,这个进程在“任务管理器”中就结束不掉,结束掉的进程说明这个进程不能对系统造成直接危害,不过,用其它软件可能能强制结束,但这样会造成蓝屏等现象。父子进程共同组成一个进程组,这样linux命令,当从键盘发出一个信号时,该信号被送给当前与键盘相关的进程组中的所有成员。一旦发现某个进程有问题,可以直接右键结束它,甚至删除它,如果正常结束不了,还有强制结束选项,这点对我们处理一些顽固进程非常有好处。
QUIT
退出。
KILL
杀死进程,即强制结束进程。
SEGV
段错误。
TERM
正常结束进程,是kill 命令的默认信号。
需要注意的是,表中省略了各个信号名称的前缀 SIG,也就是说,SIGTERM 和 TERM 这两种写法都对,kill 命令都可以理解。
下面,我们举几个例子来说明一下 kill 命令。
【例 1】 标准 kill 命令。
[root@localhost ~】# service httpd start
#启动RPM包默认安装的apache服务
[root@localhost ~]# pstree -p 丨 grep httpd | grep -v "grep"
#查看 httpd 的进程树及 PID。grep 命令査看 httpd 也会生成包含"httpd"关键字的进程,所以使用“-v”反向选择包含“grep”关键字的进程,这里使用 pstree 命令来查询进程,当然也可以使用 ps 和 top 命令
|-httpd(2246)-+-httpd(2247)
| |-httpd(2248)
| |-httpd(2249)
| |-httpd(2250)
| |-httpd(2251)
[root@localhost ~]# kill 2248
#杀死PID是2248的httpd进程,默认信号是15,正常停止
#如果默认信号15不能杀死进程,则可以尝试-9信号,强制杀死进程