无法通过c程序调用Unix命令kill(int PID)

时间:2013-09-17 07:47:58

标签: c unix kill pid

我正在我的一个系统类中用C语言编写程序。我们编写c代码并在unix环境中运行它。我已经浏览了整个互联网,但似乎找不到任何方法来使kill(int PID)命令工作。代码将编译并运行正常,但如果我使用

ps -u username
在unix命令提示符中的

命令(当然,在执行完成之后),它说我在c代码中试图杀死的所有进程仍然在运行。我可以通过手动输入他们的PID来从unix命令提示符中删除它们,但是对于我的生活,我无法弄清楚如何在我的程序中执行它。

在这个特定的程序中,我试图杀死进程CC,这是一个无限地调用usleep(100)的进程;直到终止。

我尝试过使用kill(C3,-9);和execlp的变化(" kill"," kill",C3,(char *)0);但仍然没有运气。有谁知道我在这里做错了什么?我唯一的猜测是kill命令被传递错误的PID参数,但如果是这样,我不知道如何得到正确的参数。

编辑:此外,kill命令返回零值,我相信这意味着它已成功"执行命令。

编辑:刚刚注意到我的问题的解决方案一直是在作业的指示中。对。我是个傻瓜。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int args, char* argv[])
{
        //
        //Step 7
        //
        //Create process C3
        int C3=fork();
        if (C3==0)
        {
                execlp("CC", "CC", (char *)0);
        }
        else
        {
        usleep(500000);
        //
        //Step 8
        //
        int ps=fork();
        if (ps==0)
        {
                execlp("ps", "ps", "-u", "cooley", (char *)0);
        }
        else
        {
                wait(NULL);
                kill(C3);
        }
        }
        exit(0);
}

1 个答案:

答案 0 :(得分:1)

当你需要两个参数时,你只用一个参数调用kill系统调用。这会导致未定义的行为,因为那时第二个参数可以是任何东西。编译时应该收到警告。

第二个参数应该是<signal.h>的值(参见signal(7) manual page)。