在Unix系统中利用程序实现Kill命令
在正常情况下,一般先通过 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/ttyname|ttyname|name}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下编译通过,可直接在该系统中编译运行。