C/Visual C - Duda con fork()

   
Vista:

Duda con fork()

Publicado por Ángel (19 intervenciones) el 25/08/2017 18:30:16
Tengo una duda al utilizar fork(), ya que cuando usas esta función te devuelve dos valores; 0 si es el hijo o un entero positivo si es el padre, lo que yo quiero saber es como los devuelve realmente, si da primero un valor y luego el otro si a la vez o como.
Y siguiendo con esto si tienes codigo en c, la programacion es secuencial, entonces por si te devuelve el forK()==0, y tienes codigo debajo y luego te devuelve otro valor, como se ejecutan las cosas?deja de ser secuencial?
Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Duda con fork()

Publicado por Tom (557 intervenciones) el 26/08/2017 11:34:13
Parece que no has leído mucho sobre fork() ¿ no ?

https://www.google.es/search?q=fork
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con fork()

Publicado por Ángel (19 intervenciones) el 27/08/2017 09:30:08
Con lo que he leído he entendido que el hijo hace una copia del padre, y el hijo se empieza a ejecutar desde el fork(), y la ejecución es de forma concurrente, es correcto?
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con fork()

Publicado por Tom (557 intervenciones) el 27/08/2017 10:35:26
Entonces ... ¿ crees que tus preguntas iniciales tienen mucho sentido ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con fork()

Publicado por Ángel (19 intervenciones) el 27/08/2017 10:36:45
No mucho la verdad jaja, pero es que vengo de java y no me entra en la cabeza lo de los procesos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con fork()

Publicado por Tom (557 intervenciones) el 27/08/2017 20:11:45
Pues lee sobre procesos, que es dónde quería llegar :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con fork()

Publicado por SuperIndio(SoydeSalta) (11 intervenciones) el 30/08/2017 16:23:39
Ahhhh bueno voy a echar luz sobre tanta oscuridad

En el concepto MULTIPROCESO, el MULTIPROCESO puede ser :
un proceso MULTIHILO o
un proceso MULTIPROCESO PROPIAMENTE DICHO.
la diferencia es que en el multihilo es la division de un proceso en hilos de ejecucion... como se hace?
en C + C++ se hace con la fucnion fork() en este caso cuando un hilo de ejecucion comparte aun las variables del hilo principal
y cuando finaliza vuelve al hilo principal de ejecucion....

En cambio en el MULTIPROCESO PROPIAMENTE DICHO se realiza con la funcion thread() es es un proceso totalmente distinto...
aunque se puede comunicar con el proceso principal
lo podes checkar y ver como un proceso distinto al del principal,
en cambio en el fork() no se ve por consola cuando se este ejecutando...
cuando digo linea de comando es ps -ef | grep nameproceso

en el thread() generalmete se usa conexiones tcp/ip , en este puedo o no usar una bolsa(select) y se usa para hacer un servidor de conexiones tcp/ip

1) generar el socket(pueto+ip)
2) Bind
3) Listen
4) aceptar conexiones(while)
5) recibir y responder a cada cliente (receive/send)


soy programador Networking hace varios años
utilizo fork(), Thread dedicados o Thread multihilo y alguna vez use bolsas(Thread + select())
Para usar cualquiera de estas soluciones hay que analizar porque y para que?
en eneral se usa en automatas o demonios en cambio thread se usa para hacer servidores tcp/ip
Fork() es solo para dividir procesos Ejemplo: Consultar un dato en una tabla oracle y dependiendo de su valor:
a) ejecuto un job
b) genero un reporte
3) envio un mail
4) lanzo otro proceso
5) inserto un dato en otra tabla
6) genero un archivo
7) bla bla bla
8) ble ble ble

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
printf("Eliminando el Informe de Cierre de Operaciones de Cajas \r\n");
printf("[ %s ] \n", cCmdRemove);
nRetVal = system( cCmdRemove ) ;
 
/*----------------------------------------------------*\
*  Se crea un proceso hijo (concurrente).
\*----------------------------------------------------*/
pid = fork();
 
/*----------------------------------------------------*\
*  Se verifica que se haya creado satisfactoriamente.
\*----------------------------------------------------*/
if (pid < 0)
{
 exit(EXIT_FAILURE);
}
else if (pid > 0)
{
 /*------------------------------------------------*\
  *  Si es el proceso padre, se sale del programa
 \*------------------------------------------------*/
  exit(EXIT_SUCCESS);
}
 
/*---------------------------------------------------*\
*  Asegurar que el acceso archivo no sea heredado
\*---------------------------------------------------*/
umask(0);
 
/*---------------------------------------------------*\
*  Usando setsid, separa el proceso y pone el demonio
*  dentro una nueva sesion
\*---------------------------------------------------*/
sid = setsid();
if (sid < 0)
{
  exit(EXIT_FAILURE);
}
 
printf("El Numero de Proceso AIX (_SID_):  %d \n", sid);
 
/*---------------------------------------------------*\
*  A partir de aqui comienza el codigo del demonio
*  printf("Detectando Operaciones de Caja\n");
\*---------------------------------------------------*/
while (1)
{
......
}


Aplico soluciones fork() y Thead() TCP/IP ( obvio por $$$$ en billetes verdes )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Duda con fork()

Publicado por Tom (557 intervenciones) el 30/08/2017 23:07:06
Bueno, por alguna razón que ignoro no puedo poner la respuesta que tu post se merece.
Pero creo que sí podré comentar que te has hecho un lío impresionante. Si en lo que comentas hubiera algo coherente, sería justo al revés de cómo lo explicas ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar