Todos aqueles que já lançaram programas de simulação ou de cálculo numérico muito longos devem ter pensado numa forma de saber como está progredindo a aplicação durante a sua execução. Isto é perfeitamente possível através do envio do comando shell kill aos processos associados ao sinal. Os processos podem então, após a recepção deste sinal, apresentar os dados desejados. O exemplo a seguir mostra um programa que ajuda a resolver este problema:
/* arquivo verificacao.c */ #include <errno.h> #include <stdio.h> #include <signal.h> #include <time.h> #include <unistd.h> /* as variaveis a serem editadas devem ser globais */ long somme = 0 ; void it_verificacao() { long t_date ; signal(SIGUSR1, it_verificacao) ;/* reativo SIGUSR1 */ time(&t_date) ; printf("\n Data do teste : %s ", ctime(&t_date)) ; printf("valor da soma : %d \n", (int) somme) ; } int main() { signal(SIGUSR1,it_verificacao) ; printf ("Enviar o sinal USR1 para o processo %d \n",getpid()) ; while(1) { sleep(1); somme++ ; } exit(0); }
Resultado da execução:
Se o programa é lançado em background, se o usuário digitar o
comando shell kill -USR1 pid, ele irá obter as variáveis de
controle desejadas. A primitiva ctime() usada no programa
retorna um ponteiro para uma cadeia de caracteres contendo a data sob
a forma:
"Wed Jun 30 21:49:08 1993\n"