我正在我的一个系统类中用 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);
}