在execl之后用C处理信号

在execl之后用C处理信号,c,signals,C,Signals,我处理信号有问题。我在终端上运行程序,按下CTRL+C,但看不到“我按下CTRL-C”并没有打印出来。但我正在尝试删除行execl(“/usr/bin/gedit”、“gedit”、“test.c”、NULL),并打印了“我被按下了CTRL-c” 我能帮你吗,如何打印“我被按下CTRL-C”并解释为什么。我很感激你的帮助。多谢各位 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #inclu

我处理信号有问题。我在终端上运行程序,按下CTRL+C,但看不到“我按下CTRL-C”并没有打印出来。但我正在尝试删除行
execl(“/usr/bin/gedit”、“gedit”、“test.c”、NULL)
,并打印了“我被按下了CTRL-c”

我能帮你吗,如何打印“我被按下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);
}
#包括
#包括
#包括
#包括
int loop_forever=1;
在_sigint()上无效
{
printf(“\n按下CTRL-C\n”);
loop_forever=0;
}
int main()
{
printf(“我的家庭作业”);
execl(“/usr/bin/gedit”、“gedit”、“test.c”、NULL);
信号(SIGINT,on_SIGINT);
while(永远循环)
{
}
出口(1);
}

execl
执行另一个程序来代替您的程序

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

要运行与您的程序不同的另一个程序,您可以使用

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

有关
fork
exec
如何在Unix进程模型中工作的详细说明,请参阅。

我理解您所说的。非常感谢。@user3168209如果这回答了您的问题,您可以