首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取由xdg-open创建的进程的PID

获取由xdg-open创建的进程的PID
EN

Stack Overflow用户
提问于 2014-02-11 23:24:57
回答 2查看 764关注 0票数 6

情况如下:我使用默认浏览器创建了一个打开html文件的进程。下面是它在我的例子中的样子:

代码语言:javascript
复制
if ((pid=fork())==0) {
    execlp("/usr/bin/xdg-open", "xdg-open", url, NULL);
    /*if execlp failed, exit the child*/
    exit(0);
}

但是,我希望获得进程的PID (打开的浏览器),以便稍后也可以关闭它。但我似乎不知道我怎么才能得到它。如果你有什么建议,请告诉我。

EN

回答 2

Stack Overflow用户

发布于 2014-02-11 23:46:18

您应该已经有了子进程的PID,fork()的手册页上写道:

如果成功,则在父进程中返回子进程的PID,在子进程中返回0。

所以在子进程中,你检测到0并运行你的程序,在父进程中,pid将是子进程的实际PID。

根据您的评论,接下来会发生的情况是,xdg-open进程-您现在的PID将反过来启动一个浏览器,而您无法直接访问该浏览器进程的PID。

目前,我唯一能想到的就是创建另一个子进程,您可以在其中运行ps或pgrep等命令。然后,您可以解析该命令的输出,以查找作为xdg-open的子级运行的浏览器的PID。下面是一个读取子进程here输出的示例

票数 0
EN

Stack Overflow用户

发布于 2014-02-11 23:46:02

fork()将子进程的pid返回父进程。

在子进程中,你可以用标准的getpid()获得它自己的pid。

代码语言:javascript
复制
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
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21705947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档