如何运行子进程,并在C中与父进程一起对其执行操作?

如何运行子进程,并在C中与父进程一起对其执行操作?,c,debian,fork,exec,C,Debian,Fork,Exec,我目前正在尝试将Internet浏览器(Firefox)作为C程序中的子进程运行,并在其上执行操作。首先,我想得到孩子的pid,然后和父母一起杀死它 经过一些研究,我选择使用Fork/exec创建子进程。 但当我执行代码时,这两个程序不会同时运行。 打开浏览器后,在关闭它之前,我什么都做不了 我的代码是这样的 #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() {

我目前正在尝试将Internet浏览器(Firefox)作为C程序中的子进程运行,并在其上执行操作。首先,我想得到孩子的
pid
,然后和父母一起杀死它

经过一些研究,我选择使用
Fork
/
exec
创建子进程。 但当我执行代码时,这两个程序不会同时运行。 打开浏览器后,在关闭它之前,我什么都做不了

我的代码是这样的

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{

    //version fork
    pid_t pid;
    char *parmList[] = {"firefox", "google.com", NULL};
    int a;
    printf("test001");
    if ((pid = fork()) == -1)
      perror("fork failed");

     if (pid == 0) {
        printf("test002");
        a = execvp("/usr/bin/firefox", parmList);
        printf("test003");
     }
     else {
       waitpid(pid, 0, 0);
       printf("test004");
     }
  return 0;
}
当我关闭冰鼬时,最后一行是:

test001test004root@debian:/home/user/Documents/Projet/git_sources/ProjetSIDA#


浏览器处于打开状态时,您无法使用命令提示符执行任何操作,原因是这行代码

waitpid(pid, 0, 0);
如果将其注释掉,则可以打开浏览器并返回命令提示符以再次接受输入

原因是您正在要求主进程(
a.out
在您的情况下)等待浏览器进程使用
waitpid(pid,0,0)更改其状态

waitpid(pid, 0, 0);