Esta aula tem por objectivo familiarizá-lo com a sincronização entre processos através da utilização de sinais e semáforos. Para tal, deverá implementar pequenos programas que respondam aos requisitos de cada uma das tarefas que se seguem. Para obter mais informação sobre as funções de sistema referidas, consulte as man-pages respetivas.
SIGTSTP
(enviado pelo terminal quando se
usa CTRL-Z
) e SIGINT
(enviado pelo
terminal quando se usa CTRL-C
), imprimindo nesses
casos uma mensagem adequada. Depois de instalar o handler,
o programa deve imprimir o seu PID
e, por fim, entrar
num ciclo infinito. Com o programa a correr, experimente
na shell usar o CTRL-Z
e o CTRL-C
para interromper o processo. O que acontece e porquê?SIGTERM
. Para isso deverá invocar numa outra
shell o comando "kill -15
" para
o PID
que o programa imprimiu.SIGTERM
e SIGKILL
. Qual é a razão da diferença de comportamento
do programa na recepção dos sinais SIGTERM
e
SIGKILL
?SIGKILL
ao processo deverá invocar numa outra
shell o comando "kill -9
" para
o PID
que o programa imprimiu.signal()
e pause()
.
SIGUSR1
entre pai e filho,
garanta que:
signal()
e kill()
.
sem_open()
, sem_wait()
,
sem_post()
, sem_close()
e
sem_unlink()
.
Filho: 1 Pai: 2 Filho: 3 ... Pai: 18 Filho: 19 Pai: 20O processo filho deve imprimir as linhas ímpares e o processo pai as linhas pares, até atingirem um determinado valor (20 no exemplo). Cada processo deverá ter associado um semáforo. Para indicar ao outro processo a sua vez de imprimir, o processo deverá sinalizar o semáforo associado a esse processo. Deverá depois aguardar (no seu semáforo) que o outro processo lhe passe novamente a vez de imprimir.
sem_open()
, sem_wait()
,
sem_post()
, sem_close()
e
sem_unlink()
.