Linux - Duda fork()

 
Vista:
Imágen de perfil de Miguel Ángel
Val: 8
Ha disminuido su posición en 4 puestos en Linux (en relación al último mes)
Gráfica de Linux

Duda fork()

Publicado por Miguel Ángel (5 intervenciones) el 10/05/2019 16:21:39
Hola a todos,

tengo que hacer una práctica y me ha surgido una duda. A ver si me podeis ayudar.

El caso es que estoy con las llamadas al sistema fork(), exec(), etc.

Intento que un archivo ejecutable me imprima "I'm the son" o "I'm the father" dependiendo del pid_t que tengan (id del proceso). El caso es que se me imprime 2 veces "I'm the son".... luego, a no ser que haya algún error en el archvio....

se me crean 2 procesos hijo y el padre no me lo imprime?

Aquí os dejo el archivo ejecutable:

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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/wait.h>
#include "rutines.h"
 
int main(int argc, char *argv[])
{
	char cmd[256];
	int a;
 
	pid_t x = fork();
 
	if (x=!-1){
	perror("Error Fork\n");
	} else {
		if(x==0){
		printf("I'm the son\n");
 
		}
		if (x>0){
		wait(0);
		printf("I'm the father\n");
		}
	}
 
	if (argc<2)
		Error("Insufficient arguments: exec_in <sec> <cmd> [args...]");
 
	sleep(atoi(argv[1]));
 
	cmd[0]='\0';
	for(a=2;a<argc;a++)
	{
		strcat(cmd,argv[a]);
		strcat(cmd," ");
	}
 
	system(cmd);
 
	exit(0);
}
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 fork()

Publicado por Tom (482 intervenciones) el 10/05/2019 18:20:58
¿¿¿ if (x=!-1){ ???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Miguel Ángel
Val: 8
Ha disminuido su posición en 4 puestos en Linux (en relación al último mes)
Gráfica de Linux

Duda fork()

Publicado por Miguel Ángel (5 intervenciones) el 10/05/2019 18:24:26
Cierto, Gracias! Lo cambio. Aún así, sigo con la misma duda de antes
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 fork()

Publicado por Tom (482 intervenciones) el 10/05/2019 19:09:38
¿ En serio ?
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
Imágen de perfil de Miguel Ángel
Val: 8
Ha disminuido su posición en 4 puestos en Linux (en relación al último mes)
Gráfica de Linux

Duda fork()

Publicado por Miguel Ángel (5 intervenciones) el 10/05/2019 21:27:05
No, se me olvido compilar sorry jajaja

En cualquier caso estoy pillado con este ejercicio, porque me piden que en este archivo sistituya las funciones de libreria sleep y system por llamadas al sistema (fork(), exec(), exit(), wait(), etc).

Alguien me podría ayudar? Por el momento tengo esto hecho: (aún me queda implantar el exec en lugar del system)

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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/wait.h>
#include "rutines.h"
 
int main(int argc, char *argv[])
{
	char cmd[256];
	int a;
 
	if (argc<2)
		Error("Insufficient arguments: exec_in <sec> <cmd> [args...]");
 
 
	pid_t x = fork();
	if(x==-1){
		perror("Fork error");
	}
	if(x==0){
		printf("I'm the son\n");
 
		sleep(atoi(argv[1]));
		cmd[0]='\0';
 
	}
	if(x>1){
 
		wait(0);
		printf("I'm the father\n");
 
		for(a=2;a<argc;a++){
 
			strcat(cmd,argv[a]);
			strcat(cmd," ");
		}
 
		system(cmd);
 
	}
 
 
 
	exit(0);
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