2012-06-04 35 views
0

我正在编写一个程序来创建一个处理诸如执行基本命令,管道,重定向,执行后台进程等基本功能的shell。但是我无法杀死后台进程,我需要知道后台进程的pid(),以便我可以随pid一起发送kill命令。任何想法如何从ac pogram获得后台进程的pid()? 为了运行命令,我将命令行输入到数组中,解析并将命令放入arr [0]中,并将后续参数放入后续索引中,我将系统的PATH放入另一个数组中,并将它们存储为通过使用strtok和delim选项作为字符串,在此之后,我将命令连接到路径,然后执行execv()。从c prog查找后台进程的pid

我被困在这个部分,我必须杀死一个后台进程。任何建议都会非常有帮助。

在此先感谢。

+2

但'execv()'不创建一个新的进程,但随着替代当前程序一个新的,wiouth改变PID!你必须调用fork()来创建一个新的进程。并且'fork()'返回新进程的PID ... – rodrigo

+0

我打电话给fork,然后在子进程中执行一个execv,但是如何获得后台进程的PID? – user1434883

+1

你有没有想过阅读fork(2)的文档? Stackoverflow不是您的手册页的替代品。 – tbert

回答

1

你应该做这样的事情:

#include <sys/types.h> 
#include <sys/wait.h> 
#include <unistd.h> 

int main() 
{ 
    pid_t pID = fork(); 
    if (pID == 0) { 
     execl("/bin/ls", "/bin/ls", "-r", "-t", "-l", (char *) 0); 
    } else { 
     waitpid(pID, NULL, 0); // wait for child process 
    } 
} 
1

fork返回子的PID的父进程,将它存储在某处,然后用它来杀人?

0

你可以调用getpid()(在childprosses),或在子进程的PID返回给父母打电话时fork()