【发布时间】:2021-11-21 05:14:05
【问题描述】:
我想在浏览器中打开一个链接,然后我希望程序终止。 为此,我正在创建一个使用 exec 在链接上运行 xdg-open 的子进程。 我发现如果浏览器已经打开,则关闭浏览器不会终止程序,如果浏览器尚未打开,则关闭浏览器会终止程序。 如何使子进程调用 xdg-open 后,如果父进程终止,程序应该终止。 代码如下:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
if (fork() == 0) {
execlp("xdg-open", "xdg-open", "https://youtube.com", NULL);
exit(0);
}
else
printf("I am the parent\n");
printf("Exiting now\n");
return 0;
}
编辑:在 exec 调用之后删除了一个 print 语句,因为我在 exec 之后意识到子进程被我调用的程序替换。
【问题讨论】:
-
如果
execlp成功,您将永远看不到printf("Child Exiting\n");。execlp成功则永不返回。 -
哦,是的,刚刚意识到这一点,但是如何在 exec 之后终止程序?就像从终端调用它时一样,打开链接后我没有得到提示
-
您确定您“没有收到 [您的] 提示”吗?您是否尝试过按终端中的
Enter键?那会发生什么?如果子进程输出任何内容,shell 将无法检测到并重新显示提示。但它仍然存在,在输出之前。 -
哦,我没试过,谢谢。为什么我需要按回车键?
-
@TedLyngmo 哦,好的,谢谢你指出这一点!
标签: c linux operating-system xdgutils