如何在我自己的shell中实现kill命令

时间:2015-06-23 15:06:06

标签: c

我正在尝试用C创建我的shell,但我不知道如何实现kill函数。 我不能使用命令kill(),我想通过插入例如“k process_pid ”来创建我自己的函数。

这是我的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <signal.h>
    #define maxarg 20

    void CtrlC(int sig);
    void execute(char *argv[]);
    char getargs(int *argcp, char *argv[], int max);

    int main () {

     signal(SIGINT,CtrlC);
     char *argv[maxarg+1];
     int argc;

     while (1) {
         printf(">");

         if(!getargs(&argc, argv, maxarg) || argc == 0) {
             continue;
         }      

         if(strncmp(argv[0], "exit", 4) == 0) {
             printf("Program completed.\n");
             exit(0);
         }  
         execute(argv); 
     }

 }

 char getargs(int *argcp, char *argv[], int max){

     static char cmd[100];
     char *cmdp;
     int i;

     if(gets(cmd) == NULL)
         exit(0);

     cmdp = cmd;

     for(i=0; i<=max; i++){

         if((argv[i] = strtok(cmdp, " \t")) == NULL)
             break;
         cmdp = NULL;
     }

     if(i > max){
         printf(">Too many arguments!\n");
         return -1;
     }

     *argcp = i;
     return(1);
 }

 void execute(char *argv[]) {
     int i;

     switch (fork()) {

         case -1:
             printf(">Error in the creation of the process.\n");
             return;

         case 0:
             execvp(argv[0], argv);

             printf(">Can't execute.\n");
             perror(">execvp");
             exit(1);

         default:
             if(wait(NULL) == -1)
                 perror(">Wait");
     }
 }

 void CtrlC (int sig) {

    signal(sig, SIG_IGN);
    printf("\n>To exit digit 'exit'.\n>");
    signal(SIGINT,CtrlC);
    fflush(stdout);
 }

1 个答案:

答案 0 :(得分:0)

您使用exit命令执行的操作正是如此:

  • 测试!strncmp(argv[0],"k",1)
  • 然后使用sscanf(argv[1],"%d",&pid)
  • 解码pid
  • 然后用kill(pid,SIGTERM)(或任何其他你想要的信号)杀死它