kill命令的简单实现

kill命令的简单实现

目标:简单实现kill命令

功能:

  • 向进程发送信号
  • 列出信号名字

参数:

  • -l 列出信号名字
  • -s (s=1、2、3.....)发送的信号代号

环境

ubuntu 14.04 gcc.real (Ubuntu 4.8.2-19ubuntu1) 4.8.2

代码

新手菜鸟 如有错误 欢迎指正

#include<stdio.h>
#include<signal.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>

int sent_sig(int signum,char *pid);
void list_signum(char *optarg);
unsigned int chartonum(char *str);

int main(int argc,char **argv)
{
	int opt;
	int signum=0;
	char optstring[]=":1,2,3,4,5,6,7,8,9,l:";
	while((opt=getopt(argc,argv,optstring))!=-1)
		switch(opt){
			case '1': case '2': case '3':
			case '4': case '5': case '6':
			case '7': case '8': case '9':
				signum=opt-'0';
				break;
			case 'l':
				list_signum(optarg);
				break;
			case ':':
				printf("-l need argument!
");
				exit(1);
			case '?':
				printf("unknow option!
");
				exit(1);
		}
		if(argc==1){
		  printf("no option!,no pid
");
          exit(1);		
 		}
		if(optind==argc){
			if(kill(-1,signum)!=0){
			  printf("wrong in sent sig to all process!
");
			  exit(1);
			}
			else
			  return 0;
		}
		for(;optind<argc;optind++){
			if(!sent_sig(signum,argv[optind])){
			  printf("no such process
");
			  exit(1);
			}
		}
		return 0;
}
unsigned int chartonum(char *str)
{
	char *s=str;
	unsigned int pid=0;
	while(*s){
		pid=pid*10+(*s-'0');
		s++;
	}
	return pid;
}
int sent_sig(int signum,char *str)
{
	unsigned int pid=chartonum(str);
	if(signum==0)
	  signum=9;
	if(kill(pid,signum)!=0)
	  return 0;
	else
	  return 1;
}
void list_signum(char *optarg)
{
	char *str;
	int signum=chartonum(optarg);
	str=strsignal(signum);
	printf("%s
",str);
}

原文地址:https://www.cnblogs.com/battzion/p/4233462.html