Codificar con fork y exec por ejemplo en c

Coding With Fork Exec Example C



El título de nuestro artículo contiene dos funciones diferentes del lenguaje C que ocurren mientras se ejecuta cualquier programa en nuestro sistema. Desafortunadamente, no hay posibilidad de que ocurra más de un programa a la vez en C. Solo una sola tarea puede ocurrir en un momento particular, lo que significa que no permite que se ejecuten programas concurrentes. Hace que espere a que se complete un proceso para ejecutar el otro. Para evitar este problema de resolución de problemas, es posible que deba desarrollar su programa de una buena manera, siendo un buen desarrollador. La bifurcación de Linux () se usa para superar la espera y permitir la concurrencia en su sistema. Ayuda a duplicar un nuevo proceso y crea uno nuevo llamando al proceso duplicado. El nuevo proceso es el proceso hijo y el anterior se llama proceso padre.

Considerando que, la función exec () se usa para cambiar el programa actual existente por el nuevo. Esta sustitución se realiza mediante modificaciones en el contenido de un programa o archivo. Entonces, la diferencia entre fork y exec es que fork crea un nuevo proceso a partir del proceso existente, y exec se usa para reemplazar el programa existente creando uno nuevo.







Prerrequisitos

Para ejecutar cualquier programa c en su sistema Linux, necesitamos instalar algunos requisitos previos en él. Vaya a la terminal utilizando el método de acceso directo Ctrl + Alt + T. Ahora escriba los siguientes comandos para instalar las páginas del manual.



$sudoaptoInstalar en pcmanpages-dev



Instalará todas las páginas correspondientes.





En el futuro, para ejecutar un programa en Linux, debe instalar un compilador de código. Eso se usa para compilar el código y ejecutarlo. Para ello instalaremos repositorios GCC en nuestro sistema.

$sudoaptoInstalar en pcGCC



Codificación con ejecutivo en c

Como hemos instalado las páginas de manual en Linux, usaremos el siguiente comando para ver la descripción de exec. La sintaxis de muestra principal es la siguiente:

Sintaxis

Ejecutiva(nombre de ruta/expediente, argv);

Aquí hemos utilizado el encabezado unistd.h ya que contiene toda la información de las familias de la función exec.

$hombre ejecutivo

Ahora, en la imagen citada anteriormente, puede observar los tipos de archivos exec. Éstas son la familia de funciones ejecutivas. Cada uno es para una función diferente siguiendo la misma base, exec.

Ejemplo: Ahora, avanzando, describiremos la funcionalidad de exec con la ayuda de un ejemplo. Tomaremos una función de exec para demostrar su funcionamiento, que es execv. En primer lugar, crearemos dos archivos con la extensión .c. Después de su creación, escribiremos los códigos respectivos en ellos y los ejecutaremos para ver el resultado.

Considere un nombre de archivo sample4.c. Ábrelo y usa el siguiente código. En este código, hemos utilizado execv de una manera particular que se cita a continuación.

Ejecutiva(./sample4copy, argumentos);

La primera parte contiene la nueva ruta del directorio y la segunda parte muestra la matriz de argumentos como un parámetro que hemos pasado.

Sample4.c

En primer lugar, hemos impreso la identificación del proceso actual. En segundo lugar, hemos creado una matriz de caracteres que tiene NULL al final para la terminación. En tercer lugar, hemos llamado a la función sample4copy.

Sample4copy.c

Cuando llamamos a la función exec (), la imagen del proceso cambia. A continuación, la imagen citada a continuación muestra el código de sample4copy.c.

Aquí solo hemos utilizado declaraciones de impresión para obtener la identificación del proceso actual.

La salida de los códigos respectivos se puede obtener utilizando los siguientes comandos.

$ GCC – o sample4 sample4.c
$ GCC –o sample4copy sample4copy.c
$ ./sample4

Como hemos descrito anteriormente, la palabra GCC se usa para compilar el código y, después de compilar, el código se ejecuta con éxito.

Según la imagen, el PID del archivo sample4.c se muestra primero como se declaró antes de la llamada de ejecución. Luego, después de llamar a la función exec (), se ejecutan ambas declaraciones de impresión del archivo sample4copy.c, donde se usa getpid () para obtener la identificación del proceso.

Codificar con un tenedor en c

La función fork () crea el proceso hijo a partir del proceso padre. También contiene dos encabezados, incluida la información de la bifurcación.

Sintaxis:

Tenedor Pid_t(vacío);

Podemos usar la página de manual para obtener ayuda en el uso

$hombretenedor

Ejemplo: Ahora considere un ejemplo creando un archivo sample3.c. Ingresaremos el código dentro del archivo. De acuerdo con el código, hemos establecido el estado de la bifurcación como forkrank.

Sample3.c

Hemos utilizado la declaración if-else para aplicar la condición. Aquí se declaran comandos de impresión simples para ayudar a comprender el concepto fork (). Forkrank se declara primero como 0 y luego como -1. Con un fork (), ahora hay dos procesos que funcionan al mismo tiempo. La salida se puede obtener usando el mismo código, como se usó anteriormente en el ejemplo exec.

$ GCC –o sample3.c
$./sample3

La salida muestra que el proceso hijo se ejecuta antes que el padre cuando el proceso padre estaba esperando. La función de espera implica que hace que la función principal espere a menos que se termine uno de todos los procesos secundarios.

Llamadas al sistema Fork y Exec colectivamente

Aquí tomaremos dos archivos llamados sample1.cy sample2.c. Primero, abra el archivo sampl1.cy escriba el código que se adjunta a continuación en la imagen. Hemos utilizado la llamada al sistema fork () aquí; cuando se crea el proceso hijo, p se asignará con 0. Mientras se usa la llamada al sistema exec, sample1.c se reemplazará con sample2.c.

Sample1.c

Sample2.c

Similar a los ejemplos discutidos anteriormente, el archivo sample2 contendrá las declaraciones printf. En sample1.c, el primer comando de impresión se ejecuta primero, luego se llama a la función fork, cuando p == 0, luego se ejecuta la porción secundaria y se ejecutará el archivo sample2.c. La salida contendrá GCC para compilar ambos archivos. Aquí, el id. De sample1.c principal y el id de sample2.c son diferentes porque son padre e hijo.

Conclusión

En este artículo, hemos utilizado fork y exec por separado y colectivamente para comprender el uso y el concepto fácilmente. Espero que este tutorial contenga suficiente contenido que lo lleve al acceso a ampliar sus conocimientos.