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!\n");
				exit(1);
			case '?':
				printf("unknow option!\n");
				exit(1);
		}
		if(argc==1){
		  printf("no option!,no pid\n");
          exit(1);		
 		}
		if(optind==argc){
			if(kill(-1,signum)!=0){
			  printf("wrong in sent sig to all process!\n");
			  exit(1);
			}
			else
			  return 0;
		}
		for(;optind<argc;optind++){
			if(!sent_sig(signum,argv[optind])){
			  printf("no such process\n");
			  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\n",str);
}

posted @   battzion  阅读(390)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示