PDA

View Full Version : [C] System Call alarm


osa
12-05-2006, 18:25
Salve ho scritto un piccolo programmino in C che genera un figlio, dopodichè il figlio attende 3 secondi e "uccide" il padre. Per attendere 3 secondi ho usato la funzione alarm che genera SIGALRM che ho catturato con signal ridefinendo il signal handler (potevo usara anche sleep(3), ma devo usare alarm).
Il problema è che il figlio ignora alarm(3) passando subito alla successiva istruzione. Ecco il codice, datemi una mano.
#include <stdio.h>
#include <sys/types.h> // per il tipo pid_t
#include <sys/wait.h> // per la funzione waitpid
#include <stdlib.h> // per la funzione exit
#include <errno.h> // messaggistica d'errore
#include <unistd.h> // per le funzioni exec
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <signal.h>

void sig_alarm(int);

int main( int argc, char *argv[]){

pid_t pid;

if ( (pid=fork())<0 ) {
perror("Fork error\n");
exit(1);}

else if (pid ==0){

if (signal(SIGALRM,sig_alarm)==SIG_ERR){
perror("Signal Error\n");
exit(2);}

int a=alarm(3);
printf("Alarm=%d\n",a); // A E' UGUALE A 0
printf("TIMER\n");
exit(0);}

else { //padre
printf("Padre PID=%d\n",getpid());

pause();}


}

void sig_alarm(int s){ //NON E' MAI CHIAMATA
if (kill(getppid(),SIGKILL) < 0){
perror("Kill error\n");
exit(3);}
return;
}

osa
12-05-2006, 18:40
Ho capito, alarm non blocca il processo....