【在Unix系统中利用程序实现Kill命令】
在正常情况下,一般先通过 Unix 系统的 ps命令,找到相关进程的进程号(pid),然后用 kill 9 pid 终止这些进程 。这些操作对计算机专业人员很简单,但对业务人员来说,却是比较复杂的操作 。如果能利用一段程序,业务人员只需要输入终端号,即可杀死该终端的所有进程并重新激活,就可以简化这种操作,提高工作效率 。本文简单介绍这种程序的实现方法 。
程序的功能是根据终端号杀死进程并激活终端,操作上只要在另一台终端上执行 killtty ttyname即可,其中ttyname 是需要激活的终端号 。程序的实现原理是根据输入的终端号,找到该终端运行的所有进程的进程号,并把这些进程号写入文件 。然后由大到小依次读出所有的进程号,并执行Unix的系统命令 kill(pid,SIGKILL),将该进程杀死 。程序的源代码如下:
#include
#include
#include
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下编译通过,可直接在该系统中编译运行 。
推荐阅读
- 蔬菜幼苗娇嫩 用药莫随意
- 飞利浦推出首个3G手机Nexperia蜂窝系统解决方案
- 在SCO中安装配置使用modem
- 首个基于飞利浦Nexperia蜂窝系统解决方案的GSM/GPRS/EDGE手机问世
- 提高unixware文件系统性能
- win10系统中禁用输入法具体操作方法
- 三星录音文件在哪
- win7系统中出现开机失败提示ntoskrnl.exe文件丢失具体处理步骤
- 苹果11可以双卡双待吗
- 红茶发源地