Un proceso es una instancia de un programa en ejecución. Un programa puede tener múltiples procesos ejecutándose simultáneamente.
En C, los procesos se crean utilizando la función fork()
. Esta función crea un nuevo proceso duplicando el proceso que la llama.
fork()
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// Código del proceso hijo
printf("Soy el proceso hijo\n");
} else if (pid > 0) {
// Código del proceso padre
printf("Soy el proceso padre\n");
} else {
// Error al crear el proceso
perror("fork");
return 1;
}
return 0;
}
fork()
: Crea un nuevo proceso.exec()
: Reemplaza el proceso actual con un nuevo programa.wait()
: Espera a que un proceso hijo termine.exec()
#include <stdio.h>
#include <unistd.h>
int main() {
char *args[] = {"/bin/ls", NULL};
execvp(args[0], args);
// Si execvp falla
perror("execvp");
return 1;
}
wait()
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// Código del proceso hijo
printf("Soy el proceso hijo\n");
} else if (pid > 0) {
// Código del proceso padre
wait(NULL); // Espera a que el proceso hijo termine
printf("El proceso hijo ha terminado\n");
} else {
// Error al crear el proceso
perror("fork");
return 1;
}
return 0;
}
pid_t fork(void)
: No toma parámetros y devuelve el PID del proceso hijo al proceso padre, y 0 al proceso hijo.int execvp(const char *file, char *const argv[])
: Toma el nombre del archivo a ejecutar y una lista de argumentos.pid_t wait(int *status)
: Toma un puntero a un entero donde se almacenará el estado de salida del proceso hijo.fork()
: Es fundamental entender cómo fork()
crea un nuevo proceso y cómo se comportan el proceso padre y el hijo.Para más información, consulta la documentación oficial de las funciones mencionadas: