Comunicación entre Procesos

Señales

Las señales son un mecanismo que incorporan los sistemas operativos basados en POSIX, que permiten notificar a un proceso la ocurrencia de un evento.

Para implementarlos en C, se utiliza signal.h . Cada señal es un número, pero comunmente se identifican mediante macros.

Ejemplos: SIGINT (señal 2), SIGKILL (señal 9), SIGSEGV (señal 11).

Es posible redefinir el handler de las señales para poder tomar comportamiento ante alguna de ellas.

Ejemplo: Wait

wait() espera a que un hijo cambie de estado con un SIGCHLD.

Es importante usarlo para que no se desordenen los prints en la terminal en el output.

Capabilities

En linux se distinguen procesos con permisos privilegiados (toot) y no privilegiados.

Un proceso no root no puede enviar señales a procesos root.

Sin en bargo, linux puede permitir estos envíos de mensaje si al proceso se le dan ciertas capabilities.

Strace

strace permite ver todas las syscalls que usó ese programa.

Por ejemplo, strace -q echo hola > /dev/null