¿Cómo creo procesos? ¿Cómo hago algo que corra como un servicio?

En Linux, cada programa corriendo es un proceso, y comparte el uso del procesador con el resto de los programas. El shell normalmente espera a que termine el proceso que le pedimos que corra, pero si se incluye un & al final de la linea de comando, el proceso corre "de fondo".

Los procesos se crean con la función fork. Esta función devuelve al mismo tiempo dos valores. ¿Cómo hace eso? Despues de la invocación de esta función, el proceso ya no es uno, sino dos, y casi iguales. Una de las diferencias es el valor que devolvió fork. Entonces...

if(fork() == 0)
{
        puts("uno de los procesos");
} else
{
        puts("el otro proceso");
}

Threads

En Linux existe la función clone que es un fork con más opciones. Lo particular es que permite que el nuevo proceso creado comparta cosas con su padre. Esto es la versión Linux de los threads(hilos) de ejecución. La idea es hacer un fork pero que el nuevo proceso creado comparta la memoria con su padre, compartiendo así todas las variables.

Sin embargo, la función clone() no está destinada a ser usada por nosotros, los programadores comunes. La biblioteca libc6 trae una API para manejar threads compatible con una muy difundida conocida como POSIX threads. Esta API está en todos los UNIX y es la API oficial que debe usarse.

Esta API incluye también toda una serie de herramientas para manejar locks y otros mecanismos de sincronización (como semáforos). Estos mecanismos son indispensables porque los threads de un proceso operan todos sobre la misma memoria y por eso deben coordinarse entre sí.


Mis otros artículos sobre programación en Linux.


Por Nicolás Lichtmaier. Cualquier comentario o pedido de mayor claridad o extensión será bien recibido.