通过c程序调用Unix命令kill(int-PID)时出现问题

通过c程序调用Unix命令kill(int-PID)时出现问题,c,unix,kill,pid,C,Unix,Kill,Pid,我正在我的一个系统类中用C编写一个程序。我们编写c代码并在unix环境中运行。我浏览了整个互联网,但似乎找不到任何方法使kill(intpid)命令工作。代码将编译并运行良好,但是如果我使用 ps -u username unix命令提示符中的命令(当然,在执行完成之后),它表示我在c代码中试图杀死的所有进程仍在运行。我可以通过在unix命令提示符下手动输入它们的PID来杀死它们,但就我个人而言,我不知道如何在我的程序中做到这一点 在这个特定的程序中,我试图终止进程CC,这是一个无限调用usl

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

ps -u username
unix命令提示符中的命令(当然,在执行完成之后),它表示我在c代码中试图杀死的所有进程仍在运行。我可以通过在unix命令提示符下手动输入它们的PID来杀死它们,但就我个人而言,我不知道如何在我的程序中做到这一点

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

我尝试使用kill(C3,-9);和execlp的变体(“kill”、“kill”、C3、(char*)0);但还是没有运气。有人知道我做错了什么吗?我唯一的猜测是kill命令传递了错误的PID参数,但如果是这样,我不知道如何获得正确的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);
}
#包括
#包括
#包括
int main(int args,char*argv[])
{
//
//步骤7
//
//创建进程C3
int C3=fork();
如果(C3==0)
{
execlp(“CC”,“CC”,“char*)0);
}
其他的
{
美国LEEP(500000);
//
//步骤8
//
int ps=fork();
如果(ps==0)
{
execlp(“ps”,“ps”,“u”,“cooley”,“char*)0);
}
其他的
{
等待(空);
杀死(C3);
}
}
出口(0);
}
您只使用一个参数调用系统调用,而这需要两个参数。这会导致未定义的行为,因为第二个参数可以通过任何方式定义。在编译时,您应该得到一个关于此的警告

第二个参数应该是
中的一个值(请参阅)。

您只使用一个参数调用系统调用,而这需要两个参数。这会导致未定义的行为,因为第二个参数可以通过任何方式定义。在编译时,您应该得到一个关于此的警告


第二个参数应该是
中的值(请参阅)。

谢谢您的参考。该问题的解决方案是在PID#之后添加“、SIGKILL”。谢谢您的参考。解决这个问题的办法就是加上“SIGKILL”在PID之后#。在编译阶段运行带有所有警告的gcc时,在
-Wall-Wextra-pedantic
上运行gcc会将您指向此问题。在
-Wall-Wextra-pedantic
上运行带有所有警告的gcc会将您指向此问题。