elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con fork
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con fork  (Leído 1,794 veces)
julio1

Desconectado Desconectado

Mensajes: 9


Ver Perfil
problema con fork
« en: 20 Enero 2019, 16:59 pm »

Estoy usando fork en ubuntu, entiendo que el proceso padre es el proceso principal y que el proceso hijo es el secundario. Tengo un problema con este codigo, que muestra una salida extraña algunas veces, porque sucede esto?
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4.  
  5. int main()
  6. {
  7.    printf("%d\n", getpid());
  8.    int result = fork(), status;
  9.    switch (result)
  10.    {
  11.    case -1:
  12.        perror("fork");
  13.        break;
  14.    case 0:
  15.        printf("proceso hijo: %d\n", getpid());
  16.        break;
  17.    default:
  18.        printf("proceso padre: %d\n", getpid());
  19.        break;
  20.    }
  21.  
  22.    return 0;
  23. }
  24.  
La salida extraña es esta:


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: problema con fork
« Respuesta #1 en: 20 Enero 2019, 17:31 pm »

Lo que estás viendo probablemente sea que el proceso padre ha terminado (ha llegado al return), pero el proceso hijo aun no ha mostrado por pantalla su linea.

Cuando el proceso padre termina, la consola lo detecta, y te vuelve a mostrar la línea para escribir comandos.
Luego, el proceso hijo muestra por consola su mensaje.

Al trabajar con procesos, es importante controlar el orden en el que terminan los hilos. Rara vez querrás que el proceso padre termine antes que los procesos hijos, con lo cual habría que esperar en el proceso padre a que los hijos terminen.

Para ello, entre las varias opciones que hay: http://man7.org/linux/man-pages/man2/wait.2.html


En línea

julio1

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: problema con fork
« Respuesta #2 en: 20 Enero 2019, 21:23 pm »

Gracias por la ayuda creo que el codigo final quedari así:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/wait.h>
  5.  
  6. int main()
  7. {
  8.    printf("%d\n", getpid());
  9.    int result = fork();
  10.    switch (result)
  11.    {
  12.    case -1:
  13.        perror("fork");
  14.        break;
  15.    case 0:
  16.        printf("proceso hijo: %d\n", getpid());
  17.        break;
  18.    default:
  19.        printf("proceso padre: %d\n", getpid());
  20.        wait(NULL);
  21.  
  22.        break;
  23.    }
  24.  
  25.    return 0;
  26. }
En línea

julio1

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: problema con fork
« Respuesta #3 en: 20 Enero 2019, 21:25 pm »

Publiqué este comentario sin querer, si alguien hace el favor de eliminarlo...
« Última modificación: 20 Enero 2019, 21:28 pm por julio1 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fork en php
PHP
WHK 0 3,676 Último mensaje 8 Diciembre 2007, 09:26 am
por WHK
Emular MultiHilos (multithread) Sin Fork (FAKE FORK) « 1 2 »
PHP
OzX 14 9,489 Último mensaje 27 Marzo 2009, 00:24 am
por OzX
FORK en java
Java
reylagarto19 7 6,788 Último mensaje 1 Agosto 2012, 20:47 pm
por egyware
Error en el uso del fork() « 1 2 »
Programación C/C++
nolasco281 10 4,928 Último mensaje 5 Abril 2014, 23:39 pm
por nolasco281
fork
Programación C/C++
Pirat3net 1 2,209 Último mensaje 19 Diciembre 2016, 19:48 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines