【问题标题】:C shell: kill process syntaxC shell:杀死进程语法
【发布时间】:2014-02-18 05:50:07
【问题描述】:

我正在尝试编写自己的 C shell。我想知道如何在命令行中调用“kill”。例如,

shell> kill 2      
shell: process 2 has been killed

第一行是用户输入'kill 2'

第 2 行是程序打印的关于已完成操作的消息。

我知道我必须将 pid 作为我相信的参数并发送 SIGKILL 信号。 使用类似

 kill(pid, SIGKILL);

当用户在 C 实现中输入“kill 2”时,如何连接此 kill 函数以做出响应?我想我很难将它连接到用于实现的命令行参数。我可能需要 strtok/atoi? 谢谢你。

【问题讨论】:

    标签: c process kill


    【解决方案1】:

    最好选择“getopt”,它可能看起来很休闲,

    #include <stdio.h>
    #include <ctype.h>
    #include <sys/types.h>
    #include <signal.h>
    
    int pid;
    if((pid = getopt(argc, argv, "0123456789")) != -1)
        if(isdigit(pid)){
            if(kill(pid, SIGKILL) == -1){
                perror("KILL:");
                exit(0);
            }
        }else{
            printf("Input format: kill <pid>");
        }
    

    【讨论】:

    • strtok里面的“0123456789”是指什么?是进程#吗?
    • 对不起前面的逻辑,是的,“0123456789”指的是进程的pid。
    【解决方案2】:
    #include<stdio.h>
    #include<sys/types.h>
    #include<signal.h>
    
    int main(int argc, char **argv)
    {
        if (argc < 3)
        {
            printf("usage: ./kill OPERATION(kill/cont) PID\n");
            return -1;
        }
    
        if(strcmp(argv[1],"kill") == 0 )
        {
            printf("Kill:\n");
            kill(atoi(argv[2]), SIGKILL);
        }
        else  if(strcmp(argv[1],"cont") == 0)
        {
            printf("cont:\n");
            kill(atoi(argv[2]), SIGCONT);
        }
        else
        {
            printf("Kill default:\n");
            kill(atoi(argv[2]), SIGKILL);
        }
    
        return 0;
    }
    

    【讨论】:

    • 谢谢。如果我尝试以 kill(pid, SIGCONT) 实现另一个调用,例如“cont”,会发生什么?在第一个“if”语句中,我可以执行 if (argv[1] == kill) 之类的操作吗?我怎样才能确保它转到正确的位置?
    • 所以你需要将额外的字段作为命令行传递给你想要的意思是需要继续或者干脆杀掉它。很快就更新了我的帖子。
    猜你喜欢
    • 1970-01-01
    • 2012-09-08
    • 2016-07-08
    • 2016-07-13
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    相关资源
    最近更新 更多