[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > C/C++ > 正文
在Unix系統中利用程序實現Kill命令
本文出自: 作者:建行濱州市分行科技科 張道新 趙國明 (2002-01-29 20:17:12)
在正常情況下,一般先通過 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下編譯通過,可直接在該系統中編譯運行。 
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
在Unix系統中利用程序實現Kill命令 (2002-01-29 20:17:12)
中文man手冊:killall - 以名字方式來殺死進程 (2001-09-20 07:00:00)
中文man手冊:kill - 終止進程 (2001-09-19 15:00:01)
Linux 指令篇:工作行程資訊與管理--skill (2001-04-30 14:25:52)
Linux 指令篇:工作行程資訊與管理--kill (2001-04-30 14:23:52)
 

★  樊強制作 歡迎分享  ★