next up previous
Next: Conclusão Up: Processos manipulando sinais: Exemplos Previous: Comunicação entre processos

Controle da progressão de uma aplicação

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"



Celso Alberto Saibel Santos 2000-11-14