execl后在C中处理信号
问题描述:
我在处理信号时遇到问题。我在终端中运行程序,我按了CTRL + C,但没有看到“我按下CTRL-C”没有打印。但我想删除行execl("/usr/bin/gedit", "gedit", "test.c", NULL)
,“我按CTRL-C”被打印。execl后在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);
}
答
execl
代替你执行其它程序。
基本上,它将您的过程转换为gedit
过程。您的代码将不再执行,并且gedit将在其位置运行。
运行另一个从你单独的程序,您可以使用
if(!fork()) {
execl("/usr/bin/gedit", "gedit", "test.c", NULL);
}
的详细说明,请参阅如何this question和fork
作品exec
在Unix进程模型。
我理解你说的。非常感谢你。 – Hoang 2015-03-13 17:59:11
@ user3168209如果回答您的问题,您可以[标记为已接受](http://meta.stackexchange.com/a/5235) – 2015-03-13 18:00:29