2015-03-13 45 views
1

我在处理信号时遇到问题。我在终端中运行程序,我按了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); 
} 

回答

2

execl代替你执行其它程序

基本上,它将您的过程转换为gedit过程。您的代码将不再执行,并且gedit将在其位置运行。

运行另一个从你单独的程序,您可以使用

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

的详细说明,请参阅如何this questionfork作品exec在Unix进程模型。

+0

我理解你说的。非常感谢你。 – Hoang 2015-03-13 17:59:11

+0

@ user3168209如果回答您的问题,您可以[标记为已接受](http://meta.stackexchange.com/a/5235) – 2015-03-13 18:00:29