【问题标题】:How to kill child process exec? [closed]如何杀死子进程exec? [关闭]
【发布时间】: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


【解决方案1】:

正如@someprogrammeedude 指出的那样,它实际上终止了程序,但直到我按下回车后它才给我提示,这就是我认为它仍在运行的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-27
    • 2019-07-13
    • 1970-01-01
    • 2013-05-03
    • 2017-09-22
    • 2021-07-24
    • 1970-01-01
    • 2010-12-08
    相关资源
    最近更新 更多