Senyal (informàtica)

De Viquipèdia
Dreceres ràpides: navegació, cerca

En informàtica, un senyal és una forma limitada de comunicació entre processos o IPC (de l'anglès Inter Proces Communication) utilitzat en sistemes operatius UNIX, UNIX-like i altres sistemes operatius compatibles amb l'estàndard POSIX. Bàsicament, els senyals són notificacions asíncrones que són enviades a processos amb l'objectiu de notificar-los l'ocurrència d'un esdeveniment. Els senyals permeten interrompre l'execució d'un procés per tractar un determinat esdeveniment asíncron que s'ha produït. Aquests senyals poden ser causats per diferents motius:

  • Dispositius E/S: una desconnexió...
  • Excepcions: overflow...
  • Esdeveniments establerts: Alarmes...
  • Altres processos: kill...


Quan un senyal s'envia a un procés, el sistema operatiu interromp el flux d'execució normal del procés per tal de processar l'esdeveniment indicat pel senyal. L'execució pot ser interrompuda durant l'execució de qualsevol instrucció no atòmica.

Els programes poden implementar i registrar prèviament controladors de senyal (de l'anglès signal handler). Els controladors de senyal no són més que rutines informàtiques que s'executen en rebre un senyal. Si no s'ha registrat cap controlador de senyal aleshores s'executa el controlador per defecte.

Enviament de senyals[modifica | modifica el codi]

Hi ha diverses formes d'enviar senyals a un procés. La primera és mitjançant combinacions de tecles específiques durant l'execució d'un procés:

  • Ctrl-C: envia un senyal INT o SIGINT. Per defecte (si no s'ha implementat un controlador de senyal específic per aquest senyal) provoca la terminació del procés.
  • Ctrl-Z: envia el senyal TSTP o SIGTSTP). Per defecte, provoca la suspensió o pausa de l'execució.
  • Ctrl-\: envia el senyal QUIT o SIGQUIT). Per defecte, provoca la terminació del procés i un bolcat del nucli (de l'anglès core dump).

També podem utilitzar la crida del sistema kill per enviar un senyal a un altre procés (sempre que tinguem permisos).

Finalment la tercera opció és utilitzar la comanda kill.

Llista de senyals[modifica | modifica el codi]

  • SIGHUP: (1) Penjada d'un terminal (modem, etc.) o mort d'un procés controlador; acaba el procés
  • SIGINT: (2) Interrupció des del teclat (ctrl-c); acaba el procés
  • SIGQUIT: (3) Abandonament des del teclat (ctrl-\); crea imatge de core
  • SIGILL: (4) Instrucció invàlida; crea imatge de core.
  • SIGABRT: (6) Procés avortat.
  • SIGFPE: (8) Excepció de coma flotant; crea imatge de core
  • SIGKILL: (9) kill -9. Acaba el procés de forma incondicional.
  • SIGSEGV: (11) referència de memòria invàlida. Crea imatge de core
  • SIGPIPE: (13) Escriu en un pipe però no hi ha lector. Acaba el procés.
  • SIGALARM: (14) alarm(). Acaba el procés
  • SIGTERM: (15) Senyal d'acabament. Acaba el procés.
  • SIGCONT: (18) Desperta procés pausat amb SIGSTOP.
  • SIGSTOP: (19) Pausa el procés i el posa en estat de ready, veure SIGCONT.
  • SIGUSR1: (30,10,16). A definir per l'usuari.
  • SIGUSR2: (31,12,17). A definir per l'usuari.

Podeu trobar informació més exhaustiva de tots els senyals executant:

$ man kill

o amb la comanda:

$ kill -l
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS

Vegeu també[modifica | modifica el codi]

Fonts[modifica | modifica el codi]