Pregunta

Este comentario me confunde: "matar -l generalmente enumera todas las señales". Pensé que una señal significa una cantidad cuantificada de energía.

[Agregado] Por favor, aclare la señal (computacional) en Unix y la señal física. ¿Son conceptos totalmente diferentes?

[Agregado] ¿Hay diferencias importantes entre paradigmas? ¿Es el mismo significado en lenguajes como C, Python y Haskell? La señal parece ser un término general.

¿Fue útil?

Solución

No puedo creer que las personas no estén comparando cosas como hardware y software o estresando OS en algunos puntos.

Comparación entre una señal y una interrupción :

  

La diferencia es que mientras   las interrupciones se envían a la operación   sistema por el hardware , las señales son   enviado al proceso por el operador   sistema , o por otros procesos. Nota   que las señales no tienen nada que ver con   interrupciones de software, que todavía están   enviado por el hardware (la propia CPU,   en este caso). (fuente)

Definiciones

  1. proceso = un programa en ejecución, de acuerdo con el libro a continuación

Lecturas adicionales

  1. compara la señal con Interrupciones y excepciones

  2. Libro de Tanenbaum Modern Operating Systems

Otros consejos

El manual se refiere a un mecanismo muy básico que permite que los procesos o el sistema operativo notifiquen a otros procesos mediante el envío de una señal. El sistema operativo puede usarlo para notificar a los programas sobre sus abortos (señal SIGABRT ) o sobre una falla de segmentación (a menudo causada por acceder a un puntero nulo, SIGSEGV ), para nombra dos de ellos.

Algunos servidores Unix usan señales para que el administrador pueda usar kill para enviarles una señal, haciendo que vuelvan a leer su archivo de configuración, sin necesidad de que se reinicien.

Hay acciones predeterminadas tomadas para algunas señales y otras señales simplemente se ignoran. Por ejemplo, al recibir un SIGSEGV , el programa finaliza, mientras recibe un SIGCHLD , lo que significa que un proceso secundario murió, por defecto no tendrá como resultado nada especial.

Existe una función estándar ANSI C que instala un controlador de señal, que es una función que puede ejecutar algún código al recibir una señal, llamada signal (leer en man signal ). En diferentes Unix, esa función se comporta de manera diferente, por lo que se desaconseja su uso. Su página de manual se refiere a la función sigaction (lea man sigaction ), que se comporta de manera consistente y también es más potente.

Una señal física y una señal Unix son de hecho conceptos diferentes. Cuando se envía una señal Unix de un proceso a otro, no hay una señal física correspondiente específica. Las señales Unix son simplemente una abstracción para que los programadores puedan hablar sobre los procesos que se comunican entre sí.

Las señales de Unix podrían haberse denominado mensajes, eventos, notificaciones o incluso un término inventado como "frobs". Los diseñadores simplemente eligieron el nombre '' señal '', y se atascó.

Una señal es un mensaje, ya sea para el proceso de destino o para el sistema operativo sobre el proceso de destino. Es parte de la API de Unix (y se define en varios estándares POSIX).

Leer man kill , man signal y man sigaction .

Otras preguntas SO que pueden ser útiles:

Algunas de mis notas:

Permite la comunicación asincrónica

  • Entre procesos pertenecientes a la mismo usuario
  • Del sistema a cualquier proceso
  • Del administrador del sistema a cualquier proceso
  • Toda la información asociada está en la señal misma
  • Muchas señales diferentes

SIGINT

  • Del sistema a todos los procesos asociado a una terminal
  • Activador: ^ C presionado
  • Forma habitual de detener un proceso en ejecución

SIGFPE

  • Del núcleo a un solo proceso
  • Activador: error en la operación de coma flotante

SIGKILL

  • A un solo proceso
  • Detiene la ejecución del proceso de destino

SIGALRM

  • Del núcleo a un solo proceso
  • Disparador: caducidad del temporizador

SIGTERM

  • A un solo proceso
  • Recomienda que el proceso finalice con gracia

SIGUSR1, SIGUSR2

  • De cualquier proceso a cualquier otro
  • Sin una semántica predefinida
  • Libremente utilizable por los programadores

Enviar una señal a otro proceso

  • int kill (pid, signal_ID)

El programador puede decidir qué hacer cuando una señal se recibe

  • Usar el comportamiento predeterminado
  • Ignóralo
  • Ejecutar una función de usuario

Detectando una escritura interrumpida

if (write(fd, buff, SIZE)<0) {
  switch (errno) {
   case EINTR:
    warning(“Interrupted write\n”);
    break;
  }
}…

Una señal es un mensaje que puede enviarse a un proceso en ejecución.

Por ejemplo, para decirle al Internet Daemon (inetd) que vuelva a leer su archivo de configuración, se le debe enviar una señal SIGHUP.

Por ejemplo, si el ID de proceso actual (PID) de inetd es 1234, escribiría: kill -SIGHUP 1234

Una señal es " un evento, mensaje o estructura de datos transmitida entre procesos computacionales " (de Wikipedia ).

En este caso, señal significa 'mensaje'. Entonces, está enviando un mensaje a un proceso que puede indicarle al proceso que haga varias cosas.

Una señal de Unix es un tipo de mensaje que se puede enviar ay desde procesos de Unix. Pueden hacer cosas como decirle a un proceso que salga (SIGKILL) o que un proceso tenía una referencia de memoria no válida (SIGSEGV) o que el proceso fue eliminado por el usuario que presionó control-c (SIGINT).

desde una línea de comando * nix escriba:

  

señal de hombre

eso debería tener todas las señales disponibles.

La señal es básicamente una interrupción que le dice al proceso que ha sucedido un evento en particular.

La señal generalmente se envía por el núcleo, mientras que un proceso también puede enviar la señal a otro proceso (depende de los permisos y todos) mediante el comando kill y killall y un proceso puede enviarse la señal a sí mismo mediante el aumento.

Uso principal de la señal:

  1. Para manejar la interrupción.

  2. Sincronización de procesos.

  1. La señal es una interrupción que solía indicar un proceso en el que ocurrió un evento en particular.

  2. La señal puede ser enviada por el núcleo al proceso en ejecución o de un proceso a otro proceso.

  3. En el comando bash kill y killall se usa para enviar la señal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top