通过 c 程序调用 Unix 命令 kill(int 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);
}

您只用一个参数调用kill系统调用,而它需要两个参数。这导致了未定义的行为,因为第二个参数可以通过任何东西。编译时应该会收到有关此内容的警告。

第二个参数应该是 <signal.h> 中的值(请参阅signal(7)手册页)。

相关内容

最新更新