|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 3567
|
[UNIX] Processi e fork, problema
salve a tutti, per voi sarà un giochetto analizzare questo codice e spiegarmi perchè emette questo output ed è proprio il perchè che non capisco.
ecco il codice: Codice:
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
/* variabile globale contatore dei segnali SIGUSR1
ricevuti da ciascun processo */
int ntimes = 0;
void catcher(int signo)
{
printf("Processo %d ha ricevuto un segnale #%d volte \n’’, getpid(), ++ntimes);
}
int main()
{
int pid, ppid;
signal(SIGUSR1, catcher); /* il figlio eredita questa gestione del segnale SIGUSR1 */
if ((pid=fork()) < 0)
{
perror("fork error");
exit(1);
}
else if (pid == 0)
{
ppid = getppid();
for (;;)
{
printf("figlio: mio padre e’ %d\n", ppid);
sleep(1);
kill(ppid, SIGUSR1);
pause();
}
}
else
{
for (;;)
{
printf("padre: mio figlio e’ %d\n", pid);
pause();
sleep(1);
kill(pid, SIGUSR1);
}
}
}
![]() e così continua il loop. Non ho capito: 1) perchè nell'output dopo il primo figlio:, padre: e processo xxx ricevuto ... non c'è un altro processo xxxx ricevuto ma un padre: 2)penso di aver capito come funziona lo sleep qui..ma secondo il mio ragionamento il pause ha una reazione sbagliata quindi non riesco a unire i puntini e a capire. 3) perchè il numero ntimes non aumenta ad ogni riga in output??? grazie
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W Il miglior topic di sempre Ultima modifica di D3stroyer : 14-07-2007 alle 20:00. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:12.



















