2015-03-13 2 views
1

У меня проблема с обработкой сигналов. Я запускаю программу в терминале, я нажимаю CTRL + C, но не вижу, что «Я нажал CTRL-C» не был напечатан. Но я пытаюсь удалить строку execl("/usr/bin/gedit", "gedit", "test.c", NULL), «Я нажал CTRL-C».Обработка сигналов в C после execl

Могу ли я помочь вам, как напечатать «Я нажал 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 question подробное описание того, как fork и exec работает в модели процесса Unix.

+0

Я понимаю, что вы сказали. Большое спасибо. – Hoang

+0

@ user3168209 Если этот ответ на ваш вопрос, вы можете [отметить его как принятый] (http://meta.stackexchange.com/a/5235) –

Смежные вопросы