Question

Ce commentaire me confond: "kill -l répertorie généralement tous les signaux". Je pensais qu'un signal signifiait une quantité d'énergie quantifiée.

[Ajouté] Veuillez préciser le signal (informatique) sous Unix et le signal physique. Sont-ils des concepts totalement différents?

[Ajouté] Existe-t-il des différences majeures entre les paradigmes? La signification est-elle la même dans des langages tels que C, Python et Haskell? Le signal semble être un terme général.

Était-ce utile?

La solution

Je ne peux pas croire que les gens ne comparent pas des éléments tels que le matériel et les logiciels , ni ne stressent l'OS à certains moments.

Comparaison entre un signal et une interruption :

  

La différence est que tandis que   les interruptions sont envoyées au système d'exploitation   système par le matériel , les signaux sont   envoyé au processus par l'opérateur   système , ou par d’autres processus. Note   que les signaux n'ont rien à voir avec   interruptions de logiciels, qui sont encore   envoyé par le matériel (la CPU elle-même,   dans ce cas). (source)

Définitions

  1. process = un programme en exécution, selon le livre ci-dessous

Lectures complémentaires

  1. comparez le signal à Interruptions et exceptions

  2. Le livre de Tanenbaum sur les systèmes d'exploitation modernes

Autres conseils

Le manuel fait référence à un mécanisme très élémentaire permettant aux processus ou au système d’exploitation de notifier les autres processus en envoyant un signal. Le système d’exploitation peut l’utiliser pour notifier aux programmes leurs avortements (signal SIGABRT ) ou une erreur de segmentation (souvent provoquée par l’accès à un pointeur nul, SIGSEGV ), à nommer deux d'entre eux.

Certains serveurs Unix utilisent des signaux pour que l'administrateur puisse utiliser kill pour leur envoyer un signal, leur permettant ainsi de relire leur fichier de configuration, sans exiger leur redémarrage.

Des actions par défaut sont prises pour certains signaux et d’autres sont simplement ignorés. Par exemple, lors de la réception d'un SIGSEGV , le programme se termine, alors que la réception d'un SIGCHLD , ce qui signifie qu'un processus enfant est mort, ne donnera par défaut rien de spécial.

Il existe une fonction standard ANSI C qui installe un gestionnaire de signal, fonction capable d'exécuter du code lors de la réception d'un signal, appelé signal (lu dans man signal ). Dans les différents systèmes d'exploitation Unix, cette fonction a un comportement différent, son utilisation est donc déconseillée. Sa page de manuel fait référence à la fonction sigaction (lire man sigaction ), qui se comporte de manière cohérente et qui est également plus puissante.

Un signal physique et un signal Unix sont en effet des concepts différents. Lorsqu'un signal Unix est envoyé d'un processus à un autre, il n'y a pas de signal physique spécifique correspondant. Les signaux Unix sont simplement une abstraction. Les programmeurs peuvent ainsi parler de processus qui communiquent entre eux.

Les signaux Unix auraient pu être appelés messages, événements, notifications ou même un terme inventé comme "frobs". Les concepteurs ont simplement choisi le nom "signal" et le message est resté bloqué.

Un signal est un message adressé au processus cible ou au système d'exploitation concernant le processus cible. Il fait partie de l'API unix (et est défini dans diverses normes POSIX).

Lisez man kill , signal homme et man sigaction .

Autres questions SO pouvant vous être utiles:

Certaines de mes notes:

Autorise la communication asynchrone

  • Entre les processus appartenant à la même utilisateur
  • Du système à n'importe quel processus
  • Du gestionnaire de système vers n'importe quel processus
  • Toutes les informations associées sont dans le signal même
  • De nombreux signaux différents

SIGINT

  • Du système à tous les processus associé à un terminal
  • Déclencheur: ^ C enfoncé
  • Méthode habituelle pour arrêter un processus en cours

SIGFPE

  • Du noyau à un processus unique
  • Déclencheur: erreur dans l'opération en virgule flottante

SIGKILL

  • Vers un processus unique
  • Arrête l'exécution du processus de destination

SIGALRM

  • Du noyau à un processus unique
  • Déclencheur: expiration du minuteur

SIGTERM

  • Vers un processus unique
  • Recommande au processus de se terminer normalement

SIGUSR1, SIGUSR2

  • De tout processus à tout autre
  • Sans sémantique prédéfinie
  • Librement utilisable par les programmeurs

Envoi d'un signal à un autre processus

  • int kill (pid, signal_ID)

Le programmeur peut décider quoi faire quand un signal est reçu

  • Utiliser le comportement par défaut
  • l'ignorer
  • Exécuter une fonction utilisateur

Détecter une écriture interrompue

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

Un signal est un message qui peut être envoyé à un processus en cours d'exécution.

Par exemple, pour indiquer au démon Internet (inetd) de relire son fichier de configuration, un signal SIGHUP doit être envoyé.

Par exemple, si l'ID de processus actuel (PID) d'inetd est 1234, vous devez taper: tuer -SIGHUP 1234

Un signal est "un événement, un message ou une structure de données transmis entre des processus de calcul". (de Wikipedia ).

Dans ce cas, signal signifie "message". Il s’agit donc d’envoyer un message à un processus qui peut lui dire de faire diverses choses.

Un signal Unix est une sorte de message qui peut être envoyé vers et depuis des processus Unix. Ils peuvent faire des choses comme dire à un processus de quitter (SIGKILL) ou qu'un processus avait une référence mémoire invalide (SIGSEGV) ou que le processus a été tué par l'utilisateur qui a frappé control-c (SIGINT).

à partir d'un type de ligne de commande * nix dans:

  

signal homme

cela devrait vous donner tous les signaux disponibles.

Le signal est essentiellement une interruption qui indique au processus qu'un événement particulier s'est produit.

Signal généralement envoyé par le noyau, entre-temps, un processus peut également envoyer le signal à un autre processus (selon l’autorisation donnée) en utilisant la commande kill and killall et un processus peut s’envoyer un signal à l’aide de la levée.

Utilisation majeure du signal:

  1. Pour gérer l'interruption.

  2. Synchroniser les processus.

  1. Le signal est une interruption utilisée pour indiquer à un processus qu'un événement particulier s'est produit.

  2. Le signal peut être envoyé par le noyau au processus en cours ou à un autre processus.

  3. En bash, les commandes kill et killall utilisées pour envoyer le signal.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top