Tratamiento de Señales en C

Unix Signals

SIGHUP 1 Exit Hangup
SIGINT 2 Exit Interrupt
SIGQUIT 3 Core Quit
SIGILL 4 Core Illegal Instruction
SIGTRAP 5 Core Trace/Breakpoint Trap
SIGABRT 6 Core Abort
SIGEMT 7 Core Emulation Trap
SIGFPE 8 Core Arithmetic Exception
SIGKILL 9 Exit Killed
SIGBUS 10 Core Bus Error
SIGSEGV 11 Core Segmentation Fault
SIGSYS 12 Core Bad System Call
SIGPIPE 13 Exit Broken Pipe
SIGALRM 14 Exit Alarm Clock
SIGTERM 15 Exit Terminated
SIGUSR1 16 Exit User Signal 1
SIGUSR2 17 Exit User Signal 2
SIGCHLD 18 Ignore Child Status
SIGPWR 19 Ignore Power Fail/Restart
SIGWINCH 20 Ignore Window Size Change
SIGURG 21 Ignore Urgent Socket Condition
SIGPOLL 22 Ignore Socket I/O Possible
SIGSTOP 23 Stop Stopped (signal)
SIGTSTP 24 Stop Stopped (user)
SIGCONT 25 Ignore Continued
SIGTTIN 26 Stop Stopped (tty input)
SIGTTOU 27 Stop Stopped (tty output)
SIGVTALRM 28 Exit Virtual Timer Expired
SIGPROF 29 Exit Profiling Timer Expired
SIGXCPU 30 Core CPU time limit exceeded
SIGXFSZ 31 Core File size limit exceeded
SIGWAITING 32 Ignore All LWPs blocked
SIGLWP 33 Ignore Virtual Interprocessor Interrupt for Threads Library
SIGAIO 34 Ignore Asynchronous I/O



Importante es identificar el tipo de señal a programar, aveces no son las mismas que Linux, si la excepcion no esta programada, da una salida por defecto, ej:

Si la rutina no esta programa este proceso da un core al finalizar el proceso. Ej señal tratamiento de señales.



Ej en codigo C:
// envio de señal kill -31 PID
 act.sa_handler = apps_parametros;
 sigemptyset(&act.sa_mask);
 act.sa_flags = 0;
 sigaction(SIGXFSZ, &act, &oact);


Ahora la funcion que captura la señal y realiza la accion al caputar la señal 31 es:

/*funcion que cambia el valor de la configuracion de parametros adicionales*/
void apps_parametros(int v)
{
  int cola_WRITE;
  char temp[256];
  int f=0;
 //struct sigaction act, oact;
 //act.sa_handler = SIG_IGN;
 //sigemptyset(&act.sa_mask);
 //act.sa_flags = 0;
 //sigaction(SIGXFSZ, &act, &oact);
 if (transaccion == 1) {
  interpretaREQ(texto_resp);
  sprintf(temp, "%s", mensajeOUT);
  cola_WRITE = creacola(COLA_ESCRITURA);
  if (strcmp(InMsg.szTipoIPC, "IPC_Input") != 0)
   insertacola(cola_WRITE, temp, tipo);
 }
 
 
  if(strcmp(DatosAdicionales,"off")==0 && f==0){
  //agregar el cambio del FLAG al LOG
  syslog(LOG_DEBUG,"Cambio el valor de DATOS_ADICIONALES=ON.");
   strcpy(DatosAdicionales,"on");
   f=1;
  }else if(strcmp(DatosAdicionales,"on")==0 && f==0){
  //agregar el cambio del FLAG al LOG
  syslog(LOG_DEBUG,"Cambio el valor de DATOS_ADICIONALES=OFF.");
   strcpy(DatosAdicionales,"off");
   f=1;
  }
  
}




Señales Estándar
       Linux soporta las señales  estándar  listadas  a  continuación.  Muchos
       números  de  señales dependen de la arquitectura, tal como se indica en
       la columna "Valor".  (Donde aparezcan tres valores, el primero de ellos
       es  válido  normalmente para alpha y sparc, el segundo para i386, ppc y
       sh, y el último para mips.  Un - indica que una señal no está  presente
       en la arquitectura correspondiente.)

       Las  entradas  en la columna "Acción" de la tabla especifican la acción
       por defecto para la señal de la siguiente manera:

       Term   La acción por defecto es terminar el proceso.

       Ign    La acción por defecto es ignorar la señal.

       Core   La acción por defecto es  terminar  el  proceso  y  realizar  un
              volcado de memoria.

       Stop   La acción por defecto es detener el proceso.

       En  primer lugar se listan las señales descritas en el estándar POSIX.1
       original.

       Señal      Valor     Acción   Comentario
       ----------------------------------------------------------------------
       SIGHUP        1       Term    Cuelgue detectado en la terminal de
                                     control o muerte del proceso de control
       SIGINT        2       Term    Interrupción procedente del teclado
       SIGQUIT       3       Core    Terminación procedente del teclado
       SIGILL        4       Core    Instrucción ilegal
       SIGABRT       6       Core    Señal de aborto procedente de abort(3)
       SIGFPE        8       Core    Excepción de coma flotante
       SIGKILL       9       Term    Señal de matar
       SIGSEGV      11       Core    Referencia inválida a memoria
       SIGPIPE      13       Term    Tubería rota: escritura sin lectores
       SIGALRM      14       Term    Señal de alarma de alarm(2)
       SIGTERM      15       Term    Señal de terminación
       SIGUSR1   30,10,16    Term    Señal definida por usuario 1
       SIGUSR2   31,12,17    Term    Señal definida por usuario 2
       SIGCHLD   20,17,18    Ign     Proceso hijo terminado o parado
       SIGCONT   19,18,25            Continuar si estaba parado
       SIGSTOP   17,19,23    Stop    Parar proceso
       SIGTSTP   18,20,24    Stop    Parada escrita en la tty
       SIGTTIN   21,21,26    Stop    E. de la tty para un proc. de fondo
       SIGTTOU   22,22,27    Stop    S. a la tty para un proc. de fondo

       Las señales SIGKILL y SIGSTOP no pueden ser  capturadas,  bloqueadas  o
       ignoradas.

       A  continuación  se  listan  las señales que no aparecen en el estándar
       POSIX.1 pero que son descritas en SUSv2 y SUSv3 / POSIX 1003.1-2001.

       Señal        Valor     Acción   Comentario
       -------------------------------------------------------------------------
       SIGBUS      10,7,10     Core    Error de bus (acceso a memoria inválido)
       SIGPOLL                 Term    Evento que se puede consultar (Sys V).
                                       Sinónimo de SIGIO
       SIGPROF     27,27,29     A      Ha expirado el reloj de perfilado
                                       (profiling)
       SIGSYS      12,-,12      C      Argumento de rutina inválido (SVID)
       SIGTRAP        5        Core    Trampa de traza/punto de ruptura
       SIGURG      16,23,21     B      Condición urgente en conector (4.2 BSD)
       SIGVTALRM   26,26,28     A      Alarma virtual (4.2 BSD)
       SIGXCPU     24,24,30     C      Límite de tiempo de CPU excedido
                                       (4.2 BSD)
       SIGXFSZ     25,25,31     C      Límite de tamaño de fichero excedido
                                       (4.2 BSD)

       En las versiones de Linux  anteriores  a  la  2.2  (incluida  ésta)  el
       comportamiento  por  defecto para SIGSYS, SIGXCPU, SIGXFSZ, y (en otras
       arquitecturas distintas a SPARC y MIPS) SIGBUS era terminar el  proceso
       (sin  realizar  un volcado de memoria).  (En otros Unix’s la acción por
       defecto para SIGXCPU y SIGXFSZ es terminar el proceso sin  realizar  un
       volcado  de  memoria.)   Linux  2.4  cumple los requisitos del estándar
       POSIX 1003.1-2001 con respecto a estas señales, terminando  el  proceso
       con un volcado de memoria.

       A continuación otras señales.

       Señal          Valor      Acción   Comentario
       ------------------------------------------------------------------------------------
       SIGIOT           6         Core    Trampa IOT. Un sinónimo de SIGABRT
       SIGEMT      7,-,7  Term
       SIGSTKFLT     -,16,-       Term    Fallo de la pila en el coprocesador (no usada)
       SIGIO        23,29,22      Term    E/S permitida ya (4.2 BSD)
       SIGCLD        -,-,18       Ign     Un sinónimo de SIGCHLD
       SIGPWR       29,30,19      Term    Fallo de corriente eléctrica (System V)
       SIGINFO       29,-,-               Un sinónimo para SIGPWR
       SIGLOST        -,-,-       Term    Bloqueo de fichero perdido.
       SIGWINCH     28,28,20      Ign     Señal de reescalado de la ventana (4.3 BSD, Sun)
       SIGUNUSED     -,31,-       Term    Señal no usada.

       (La  señal 29 es SIGINFO / SIGPWR en la arquitectura alpha pero SIGLOST
       en sparc.)

       La señal SIGEMT no está especificada en el estándar POSIX  1003.1-2001,
       pero   sin   embargo   aparece  en  la  mayoría  de  Unix’s,  donde  su
       comportamiento por defecto es habitualmente  terminar  el  proceso  sin
       realizar un volcado de memoria.

       La  señal  SIGPWR  (que  no  está  especificada  en  el  estándar POSIX
       1003.1-2001) es ignorada habitualmente por defecto en  aquellos  Unix’s
       donde aparece.

       La  señal  SIGIO  (que  no  está  especificada  en  el  estándar  POSIX
       1003.1-2001) es ignorada por defecto en muchos Unix’s.

No hay comentarios.:

Problemas de activación WIFI6 en LG_OLED55CXPSA

  Mi experiencia con este TV  ah sido impecable hasta ahora, llevaba un uso normal y no tenia que usar la conexión por wifi ya que tengo una...