在正常情况下,一般先通过 unix 系统的 ps命令,找到相关进程的进程号(pid),然后用 kill 9 pid 终止这些进程。这些操作对计算机专业人员很简单,但对业务人员来说,却是比较复杂的操作。如果能利用一段程序,业务人员只需要输入终端号,即可杀死该终端的所有进程并重新激活,就可以简化这种操作,提高工作效率。本文简单介绍这种程序的实现方法。
程序的功能是根据终端号杀死进程并激活终端,操作上只要在另一台终端上执行 killtty ttyname即可,其中ttyname 是需要激活的终端号。程序的实现原理是根据输入的终端号,找到该终端运行的所有进程的进程号,并把这些进程号写入文件。然后由大到小依次读出所有的进程号,并执行unix的系统命令 kill(pid,sigkill),将该进程杀死。程序的源代码如下:
#include<stdio.h>
#include<sys/types.h>
#include<signal.h>
main(argc,argv)
int argc;
char *argv[];
{
file *fp;
char fname[50],pscmd[50],ttyname[10];
if(argc< 2){
printf(“usage:%s /dev/ttynamettynamename}\n”,argv[0]);
exit(0);
}
strcpy(fname,“/tmp/psout”);
strcat(fname,argv[1]);
if(!strncmp(argv[1],“/dev/”,5)){
strncpy(ttyname,argv[1]+5,9);
}
else if(!strncmp(argv[1],“tty”,3))
strcpy(ttyname,argv[1]);
else{
strcpy(ttyname,“tty”);
strcat(ttyname,argv[1]);
}
sprintf(pscmd,“ps -o \"pid=\“-t %s>%s”,ttyname,fname);
if(system(pscmd)<0){
exit(-1);
}
kill_pid(fname);
}
kill_pid(filename)
char *filename;
{
file *fp;
char ch,pid[10];
int *ipid;
ipid=(int *)(malloc(sizeof(int)));
if((fp=fopen(filename,“r”))==null){
exit(-1);
}
while(fgets(pid,20,fp)!=null){
*ipid=atoi(pid);
ipid++;
}
fclose(fp);
while(--ipid){
kill(*ipid,sigkill);
}
}
上述程序中有关unix的系统调用问题,请参考有关的技术资料,这里不再赘述。该程序在sco openserver 5.04下编译通过,可直接在该系统中编译运行。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器