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

时间:2014-02-11 15:24:57

标签: c exec fork

情况如下:我使用默认浏览器分叉进程打开html文件。以下是我的观点:

if ((pid=fork())==0) {
    execlp("/usr/bin/xdg-open", "xdg-open", url, NULL);
    /*if execlp failed, exit the child*/
    exit(0);
}

但是,我想要掌握进程的PID(打开的浏览器),以便我以后也可以关闭它。但我似乎不知道怎么能得到它。如果您有任何建议,请告诉我。

2 个答案:

答案 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
}