Comunicación de procesos en Linux: Shell, Identificadores, Señales y Sockets
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 5,38 KB
C1. Formas de ejecutar un archivo de texto ASCII como un shell
Existen tres formas para conseguir que un archivo de texto ASCII se pueda ejecutar como un shell:
linux~$ ./scriptshell.sh
linux~$ source scriptshell.sh
linux~$ . scriptshell.sh
C2. Operaciones lógicas en una shell script
Las operaciones lógicas en una shell script se evalúan en cortocircuito. Esto significa que si el resultado de una operación lógica se puede determinar sin evaluar todas las condiciones, la evaluación se detiene. Por ejemplo:
if [ $a -eq 1 ] || [ $b -eq 2 ]; then echo "Al menos una de las condiciones es verdadera" fi
C3. Función de la biblioteca estándar "system()"
La función system()
de la biblioteca estándar de C proporciona una manera fácil de ejecutar un comando desde un programa, de la misma manera que si el comando se ha escrito en un shell. Esta función crea un subproceso que ejecuta el Bourne shell estándar (/bin/sh
) y pasa el control a la shell para su ejecución. La función devuelve el valor de retorno del comando shell.
C4. Uso de la función exec
Las funciones exec reemplazan el programa que se ejecuta en un proceso con otro programa. Cuando un programa llama a una función exec
, este proceso cesa inmediatamente la ejecución de ese programa y comienza a ejecutar un nuevo programa desde el principio. Por ejemplo:
execl("/bin/ls", "ls", "-l", NULL);
C5. Mecanismo de señales de Linux
Las señales son mecanismos para comunicar y manipular los procesos en Linux. Una señal es un mensaje especial enviado a un proceso. Las señales son asíncronas, lo que significa que cuando un proceso recibe una señal, la procesa de forma inmediata, sin terminar la función actual o incluso la línea actual de código. Algunas de las señales más empleadas son SIGBUS, SIGSEGV y SIGFPE.
C6. Tipos de señales para terminar un proceso
Un proceso puede terminar de forma anormal en respuesta a una señal. Algunas de las señales más empleadas para terminar un proceso son SIGINT, SIGTERM, SIGABRT y SIGKILL. Cada una de estas señales tiene diferentes características y efectos.
C7. Procesos zombis y cómo evitarlos
Un proceso zombi es un proceso que ha terminado, pero no se ha limpiado aún. Un proceso zombi se produce cuando un proceso hijo termina y el proceso padre no está llamando a wait. Para evitar los procesos zombis, el proceso padre debe llamar a wait de forma periódica para limpiar a los hijos zombis.
C8. Tipos de comunicación de procesos en Linux
En los sistemas Linux podemos encontrar cinco tipos de comunicación entre procesos:
- Memoria compartida: permite a los procesos comunicarse con la simple lectura y escritura en una posición de memoria especificada.
- Memoria asignada: similar a la memoria compartida, excepto que está asociada con un archivo en el sistema de archivos.
- Tuberías: permiten la comunicación secuencial de un proceso con otro proceso relacionado.
- FIFO: similares a las tuberías, excepto que permiten a procesos no relacionados comunicarse debido a que al tubo se le da un nombre en el sistema de archivos.
- Sockets: permiten la comunicación entre procesos en diferentes máquinas conectadas por una red de computadoras.
C9. Comunicación entre un proceso padre y su hijo a través de una tubería
Para comunicar un proceso padre con su hijo a través de una tubería, se deben seguir los siguientes pasos:
- Llamar a la función
pipe
para crear los descriptores de archivos de la tubería. - Llamar a la función
fork
para generar un proceso hijo. - El padre escribe una cadena en la tubería y el hijo lee por el otro extremo.
C10. Funciones popen y pclose
La función popen
crea un proceso hijo que ejecuta un comando especificado, mientras que la función pclose
cierra el flujo de datos del proceso hijo, espera a que el proceso termine y devuelve su valor de estado.
C11. Espacios de nombres de socket
Los espacios de nombres de socket especifican cómo se escriben las direcciones de socket. Los espacios de nombres más empleados son los locales y los de internet. Los sockets locales se utilizan para comunicación entre procesos en el mismo equipo, mientras que los sockets de internet se utilizan para conectar procesos de diferentes máquinas conectadas por una red de computadoras.
C12. Pasos para realizar una conexión cliente-servidor
Para que un cliente pueda realizar una conexión con un servidor, debe seguir los siguientes pasos:
- Llamar a la función
socket
para crear un socket. - Llamar a la función
connect
para establecer una conexión con el servidor. - Enviar y recibir datos utilizando las funciones
send
yrecv
. - Cerrar la conexión utilizando la función
close
.
C13. Obtener una dirección IP a partir de un nombre de host
Para obtener una dirección IP a partir de un nombre de host, se puede emplear la función gethostbyname
. Esta función convierte nombres de host legibles por los humanos en direcciones IP de 32 bits.