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

标签 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);
}

最佳答案

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

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

关于c - 无法通过c程序调用Unix命令kill(int PID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18844143/

相关文章:

c++ - 如何使用 Turbo C++ 编译器配置 eclipse CDT

linux - Unix/Linux,删除行中的注释

python-3.x - 杀死python3.X中的所有进程和线程

c# - 阻止应用程序在终止进程时关闭屏幕

c - 尝试在 C 中复制数组时的字符串连接

c - 如何通过将标记粘贴在一起来创建类似函数的宏标记

python - 在python中计算crc8 dvb s2

c - 我不明白 args[0][0] -'!' 是什么意思

c - 在哪里可以找到函数 "__swtch_pri"的代码?

linux - Linux 上的 killproc 和 pidofproc