在Unix系统中利用程序实现Kill命令

王朝system·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

在正常情况下,一般先通过 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下编译通过,可直接在该系统中编译运行。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航