INTRODUZIONE ALLA PROGRAMMAZIONE IN C



Invio di segnali/kill()



int kill(int pid, int signal) - manda un "signal" ad un processo "pid". Se pid e' maggiore di 0 il segnale viene inviato al processo il cui process ID corrisponde a pid; se pid e' 0, il segnale e' mandato a tutti i processi, eccetto i processi di sistema. kill() ritorna 0 per le chiamate che hanno successo, -1 negli altri casi settando conseguentemente "errno". Esiste anche un comando UNIX chiamato kill (vedere le pagine "man"). NOTA: a meno che non si blocchi o venga ignorato, il segnale kill termina il processo. Percio' le protezioni sono incorporate all'interno del sistema. E' possibile eliminare solamente i processi con determinati privilegi di accesso. Una regola di base e' quella per cui solamente i processi che appartengono allo stesso utente possono inviare/ricevere messaggi. Il segnale SIGKILL non puo' bloccarsi o essere ignorato, e terminera' sempre il processo. Per esempio: kill(getpid(),SIGINT); inviera' un segnale di interrupt all'ID del processo chiamante. Questo avrebbe un effetto simile al comando exit(). Anche CTRL-C, digitato dalla linea di comando, invia un SIGINT al processo correntemente in essere. unsigned int alarm(unsigned int seconds) - dopo "seconds" secondi, invia il segnale SIGALRM al processo che ha effettuato la chiamata.