学科分类
目录
Linux编程

kill命令

在shell命令行使用命令也可以产生信号,第6章中我们只说明了kill的一种用法——终止进程,这里我们将结合信号的知识,对其用法进行补充讲解。

其实kill命令与系统调用kill的用法很类似:kill命令的格式为“kill 选项 参数”,它的选项用于设置要发送的信号,等同于kill()中的sig;参数用于设置发送信号的对象,等同于kill()中的pid。kill命令的参数取值也有4种,所代表的含义与系统调用kill()相同。现以如下命令,在系统中创建5个进程:

[itheima@localhost ~]$ cat | cat | cat | cat | wc -l

该命令的功能是从终端读取信息,经过3次管道传输后,使用wc命令统计读取信息的数目。执行此命令后,当前终端会等待信息输入,此时另外开启一个终端,使用“ps aux”命令查看进程状态,可以观察到尾行有5个pid相连的进程,具体信息如下所示:

itheima   2765 0.0 0.0 100944  552 pts/0  S+  10:31  0:00 cat
itheima   2766 0.0 0.0 100944  552 pts/0  S+  10:31  0:00 cat
itheima   2767 0.0 0.0 100944  552 pts/0  S+  10:31  0:00 cat
itheima   2768 0.0 0.0 100944  548 pts/0  S+  10:31  0:00 cat
itheima   2769 0.0 0.0 100928  640 pts/0  S+  10:31  0:00 wc -l

这5个进程都是由第一个终端中的命令开启的进程,它们同属进程组2765。系统调用中kill()的参数pid的取值分为四种,下面针对这四种情况,以9号信号SIGKILL为例,讲解kill命令的功能。

① pid>0。在终端1输入命令“kill -9 2765”,终端1会输出“0”,在终端2再次查看进程,进程2765已经消失。

② pid=0。在终端2输入命令“kill -9 0”,终端2的所有进程(包括终端)都被关闭;

③ pid=-1。在终端2输入命令“kill -9 -1”,当前设备上的所有进程(包括终端)都被关闭;

④ pid<-1。在终端2输入命令“kill -9 -2765”,终端1打印信息“Killed”,使用“ps aux”查看当前进程,进程组2765中的进程都已消失。

其实当pid>0时,即使用命令“kill –9 2765”后,不单进程2765终止,进程组2765中的所有进程都会终止,但除pid为2765之外的进程都是自然终止的,读者应注意这种情况与pid<-1时命令作用效果的区别。

点击此处
隐藏目录