设为主页
收藏本站
当前位置 :
首页
->
Linux技术
->
Linux程序设计
->正文
也谈在Unix系统中杀死相关终端的进程
来源:
Linuxdby.com
作者:
Webmaster
时间:
2007-06-04
点击:
[
收藏
] [
投稿
]
今年第31期《计算机世界》报上登载了“在Unix系统中利用程序实现kill命令”一文,文章介绍了在Unxi系统中用C语言实现kill命令的方法。笔者在实践中找到了另外一种方法,通过Unix系统下Shell编程可以完成同样的功能,而且使用起来更加方便、灵活、便于维护。
本程序名为kill_tty,设计思路是把需要杀死的终端名作为kill_tty命令的参数,充分运用Unix系统的管道技术与awk语句的灵活性,找出相应终端的进程号,然后将其杀死。
命令格式:kill_tty终端设备名。
实现步骤
1.检验kill_tty命令参数$1的合法性。
用grep命令检查在/etc/ttytype文件当中是否存在参数$1,因为所有正在使用的终端都在/etc/ttytype文件中有相应的设备类型,如果在/etc/ttytype文件里找不到参数$1所表示的终端号,说明$1是不合法的,终止程序运行。
grep$1/etc/ttytype>/dev/null2>&1
if[$?=1];then
echo“\a终端设备类型不对!”
exit1
fi
2.把终端名$1作为变量,由echo命令通过管道方式交给awk语句去处理,整个处理过程实际上就是用“ps-f-t”命令检查出所要杀死终端的相应进程号,处理的结果通过管道方式由/bin/sh完成。
echo$1|awk’{print“ps-f-t”$0}’|/bin/sh
以终端为/dev/tty01为例,执行的结果为:
UIDPIDPPIDCSTIMETTYTIMECMD
root3231020:07:31tty0100:00:00/bin/loginboot
root360323220:07:37tty0100:00:00-sh
root4043601420:09:57tty0100:00:00-sh
root410404320:09:57tty0100:00:00/bin/sh
root411410020:09:57tty0100:00:00ps-f-ttty01
这里第2列(PID)为进程标识号,终止任务需要的就是这个标识号,第8列(CMD)表示任务的程序名。
3.有时候有些终端执行的任务可能比较多,因而与终端有关的进程比较多,我们没有必要将与这个终端有关的正在运行的所有进程全部杀死。只需要将这个终端的sh进程杀死,就终止了这个终端的所有任务。因为在Unix系统中,sh是用户层和核心层的接口,Unix系统就是通过它对终端上所有任务进行调度和管理的,没有它任何一台终端上的任务都无法完成。因此,要想重新激活某个终端,只要先找出与这个终端相关的sh进程号,然后将其杀死即可达到目的。
awk’$8~/sh/{if(NR==1)next;print“kill-9”$2}’|\
/bin/sh〉/dev/null2>&1
完整程序如下:
grep$1/etc/ttytype>/dev/null2>&1
if[$?=1];then
echo“\a终端设备类型不对!”
exit1
fi
echo$1|awk’{print“ps-f-t”$0}’|/bin/sh|\
awk’$8~/sh/{if(NR==1)next;print“kill-9”$2}’|\
/bin/sh〉/dev/null2>&1
小结
所有命令通过管道技术串联起来,把上一个命令的输出结果作为下一个命令的输入,最后一条命令将最终的结果输出。和C语言所编写的程序比较起来,一方面Unix系统中Shell编程比较简单明了,程序本身比较短小,不像C语言那样复杂;另一方面Shell是交互式程序,不需要编译便可直接使用,因而比C语言更便于维护。
需要说明的是,由于在多数情况下,一般用户没有权限执行Unix系统的kill命令杀死不同组的一般用户的进程,而超级用户可以终止正在系统中运行的所有用户的进程,因此要尽可能地在超级用户root状态下执行kill_tty程序。
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>> 论坛入口 <<
上一篇:
赶走一些你不希望进入的用户
下一篇:
从ifconfig中得到IP地址
【
文章评论
】 【
收藏本文
】 【
推荐好友
】 【
打印本文
】 【
我要投稿
】 【
论坛讨论
】
更多相关文章
·
快速编辑Shell命令行
·
从2.4到2.6内核发展中的改进
·
两个很详细的shell实例
·
内核设计篇
·
shell技巧
·
批量添加用户
·
HowtoCreatingandBootingaNewKernelWithautoconf
·
利用ip_conntrack表实现封ip的shell脚本,并有简
·
30分钟搞定BASH脚本编程!
·
Shell初学者的入门知识
推荐文章
·
Linux操作系统的内存管理特性简介
·
更多的 bash 基本编程
·
Liunx操作系统编程之Const使用详解
·
Linux程式设计-11.ShellScript(bash
·
Linux系统环境下的Socket编程详细解
·
Linux编程C++内存管理的指针传递详
·
Shell初学者的入门知识
·
Linux编程之序列化存储Python对象(
精彩文章
·
GNU 线性编程工具包(线性优化简介)
·
Linux脚本开发数学库在PHP中的重要
·
shell要如何分类呢?
·
Linux程序开发:QT中的多线程编程
·
Linux操作系统的声音设备编程实例
·
用Shell编程实现DOS风格Linux命令行
·
Linux操作系统网桥源码框架初步分析
·
设置Unix启动admin888
·
技巧:Vimdiff 使用
·
用Perl 来创建可重用的Web应用程序
·
定制 bugzilla 进行项目管理
·
Linux系统套接字编程中存在的五个隐
·
基于libmad 的简单MP3流媒体播放器
·
在Bourneshellscript里要怎么找出最
·
shell编程例子--一个.login例子
·
Linux操作系统套接字编程的5个隐患
·
Linux与Unix二大操作系统编程的安全
·
Linux操作系统编程经常使用的一些工
·
Apache和Subversion 搭建安全CVS
·
五种常见的 PHP 设计模式
·
Linux操作系统下的多进程编程详细解
·
用C语言实现Ping程序功能
·
Shell递归程序设计-批量转换大写文
·
AIX 中Paging Space使用率过高分析
·
Linux程式设计-11.ShellScript(bash
·
学习使用Perl 5.8.6 中的Unicode 特
Power by linux-cn.com
粤ICP备05006655号