在execl之后用C处理信号
我处理信号有问题。我在终端上运行程序,按下CTRL+C,但看不到“我按下CTRL-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
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如果这回答了您的问题,您可以