在 execl 之后处理 C 中的信号

Handling signals in C after execl

我在处理信号时遇到问题。我在终端中 运行 程序,按了 CTRL + C,但没有看到 "I am pressed CTRL-C" 未打印。但我正在尝试删除行 execl("/usr/bin/gedit", "gedit", "test.c", NULL),"I am pressed CTRL-C" 已打印。

请问如何打印"I am pressed CTRL-C"并说明原因。感谢您的帮助。非常感谢。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

int loop_forever = 1;

void on_sigint()
{
    printf("\nI am pressed CTRL-C\n");
    loop_forever = 0;
}

int main()
{
    printf("My homework\n");

    execl("/usr/bin/gedit", "gedit", "test.c", NULL);
    signal(SIGINT, on_sigint);
    while (loop_forever)
    {
    }

    exit(1);
}

execl 执行另一个程序 代替 你的程序。

基本上,它将您的流程转换为 gedit 流程。您的代码将不再执行,gedit 将 运行 取而代之。

要运行另一个程序你的程序分开,你可以使用

if(!fork()) {
  execl("/usr/bin/gedit", "gedit", "test.c", NULL);
}

有关 forkexec 如何在 Unix 进程模型中工作的详细说明,请参阅 this question