• 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);
    }
    
    
  • 相关阅读:
    servlet的监听器、过滤器、拦截器的区别
    根据一个单词找所有的兄弟单词的思想如何处理
    Maven deploy 部署 jar 到 Nexus 私服
    在vps上搭建hexo博客
    Java解决LeetCode72题 Edit Distance
    学以致用:Python爬取廖大Python教程制作pdf
    puppeteer截图
    Netty接收HTTP文件上传及文件下载
    Docker中执行Shell出现乱码
    Netty URL路由方案探讨
  • 原文地址:https://www.cnblogs.com/battzion/p/4233462.html
Copyright © 2020-2023  润新知