gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:42:45 33 4
gpt4 key购买 nike

我正在尝试用 C 创建 shell,但我不知道如何实现终止功能。我无法使用命令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);
}

最佳答案

正如您使用 exit 命令所做的那样,您只需:

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

关于c - 如何在我自己的shell中实现kill命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31006522/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com