情况如下:我使用默认浏览器分叉进程打开html文件。以下是我的观点:
if ((pid=fork())==0) {
execlp("/usr/bin/xdg-open", "xdg-open", url, NULL);
/*if execlp failed, exit the child*/
exit(0);
}
但是,我想要掌握进程的PID(打开的浏览器),以便我以后也可以关闭它。但我似乎不知道怎么能得到它。如果您有任何建议,请告诉我。
答案 0 :(得分:1)
你应该已经有了子进程的PID,fork()的手册页说:
成功时,子进程的PID在父进程中返回, 在孩子身上返回0。
所以在子进程中你检测到0并运行你的程序,在父pid中将是孩子的实际PID。
根据你的评论,接下来会发生的是xdg-open进程 - 你现在的PID现在将依次启动浏览器而你无法直接访问该浏览器进程的PID。
目前我唯一想到的就是创建另一个运行ps或pgrep等命令的子进程。然后你可以解析该命令的输出来找到正在运行的浏览器的PID作为xdg-open的孩子。有一个例子是读取子进程here
的输出答案 1 :(得分:0)
fork()
将子进程的pid返回给父进程。
在孩子身上,您可以使用标准getpid()
获取自己的pid。
pid_t child_pid = fork();
if (child_pid < 0) {
perror("fork");
// error handling
} else if (!child_pid) {
// child goes here
pid_t my_pid = getpid();
} else {
// parent continues here
}