如何运行子进程,并在C中与父进程一起对其执行操作?
我目前正在尝试将Internet浏览器(Firefox)作为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() {
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);