Uso de Señales en Linux

1. El concepto básico de señal

Una señal es un evento generado por el sistema en respuesta a una determinada condición, y el proceso realizará la acción correspondiente al recibir la señal.

2. El método correspondiente para modificar la señal - señal ()

Utilice la señal () para modificar la señal especificada
Ignore la señal: SIG_IGN
Procesamiento predeterminado: SIG_DFL
Personalizado: función de procesamiento de señal escrita por usted mismo

Ejemplo 1:
Por ejemplo, el siguiente programa muestra que la señal SIGINT (la señal se genera cuando se presiona ctrl+c en el teclado) se modifica a un controlador divertido personalizado

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<assert.h>
void fun(int sign)
{
    
    
    printf("fun was called, sign = %d\n", sign);
}
int main()
{
    
    
    signal(SIGINT, fun);
    while(1)
    {
    
    
    sleep(1);
    printf("main running\n");
    }
    exit(0);
}

El programa se ejecuta de la siguiente manera:
inserte la descripción de la imagen aquí

3. Enviar una señal - matar()

kill() puede enviar la señal especificada al proceso especificado'
int kill(pid_t pid,int sig);

pid > 0 especifica a qué proceso enviar la señal

pid == 0 La señal se envía a un proceso en el mismo grupo de procesos que el proceso actual

pid == -1 envía la señal a todos los procesos en el sistema que tienen permiso para enviar

pid < -1 Envía la señal a todos los procesos cuyo ID de grupo de procesos es igual al valor absoluto de pid y tiene permiso para enviar.

sig especifica el tipo de señal enviada.

Ejemplo 2:
el siguiente código significa: ejecute este programa e ingrese el pid de un proceso, y use la señal de firma para procesar el proceso

#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <signal.h>

int main(int argc, char* argv[])//pid, sig
{
    
    
    if ( argc != 3 )
    {
    
    
    printf("argc error\n");
    exit(0);
    }
    int pid = 0;
    int sig = 0;
    sscanf(argv[1],"%d",&pid); 
    sscanf(argv[2],"%d",&sig);
   if ( kill(pid,sig) == -1 )
    {
    
    
     perror("kill error");
     }
      exit(0);
}

El programa se ejecuta de la siguiente manera:
consulte la identificación del proceso del ejemplo 1, luego ejecute el ejemplo 2, elimine el proceso 14851 (ejemplo 1) con la señal SIGKILL (#define SIGKILL 9)
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_54355780/article/details/122790259
Recomendado
Clasificación