情况如下:我使用默认浏览器创建了一个打开html文件的进程。下面是它在我的例子中的样子:
if ((pid=fork())==0) {
execlp("/usr/bin/xdg-open", "xdg-open", url, NULL);
/*if execlp failed, exit the child*/
exit(0);
}但是,我希望获得进程的PID (打开的浏览器),以便稍后也可以关闭它。但我似乎不知道我怎么才能得到它。如果你有什么建议,请告诉我。
发布于 2014-02-11 23:46:18
您应该已经有了子进程的PID,fork()的手册页上写道:
如果成功,则在父进程中返回子进程的PID,在子进程中返回0。
所以在子进程中,你检测到0并运行你的程序,在父进程中,pid将是子进程的实际PID。
根据您的评论,接下来会发生的情况是,xdg-open进程-您现在的PID将反过来启动一个浏览器,而您无法直接访问该浏览器进程的PID。
目前,我唯一能想到的就是创建另一个子进程,您可以在其中运行ps或pgrep等命令。然后,您可以解析该命令的输出,以查找作为xdg-open的子级运行的浏览器的PID。下面是一个读取子进程here输出的示例
发布于 2014-02-11 23:46:02
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
}https://stackoverflow.com/questions/21705947
复制相似问题