Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Programación de procesos

Estas en el tema de Programación de procesos en el foro de C/C++ en Foros del Web. Hola, El siguiente código es de una función de una shell que he empezado a programarme (ha sido resumido con el fin de mostrar la ...
  #1 (permalink)  
Antiguo 25/04/2010, 03:06
 
Fecha de Ingreso: abril-2010
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Programación de procesos

Hola,

El siguiente código es de una función de una shell que he empezado a programarme (ha sido resumido con el fin de mostrar la idea correctamente, por lo que puede tener algún error) muestra la ejecución de dos hilos uno con un hijo ejecutando el execv con su comando (en linux) y otro esperándole:

Código:
pid1 = fork();

	
if (pid1 < 0)

	{

		printf("¡¡ No se pudo duplicar !!\n");

		exit(1);

	}



	if (pid1 == 0)

	{
		signal (20, SIG_DFL);
		signal (2, SIG_DFL);
		
               execv(ruta, args);		

		perror("minishell: ");

		exit(0);

	}

	else{
			
                   waitpid(pid1, &status1, WUNTRACED);
			
	}
	return 0;
Los signals són para que les afecte la señal de Control Z (la 20) y Control C (la 2), y luego hago que se ignoren en el principal como sigue:

Código:
int main(int argc, char *argv[])

{

	int result = handle_options(argc, argv);



	if (result != 0)

		exit(result);



	printf("minishell v0.1\n");



	while (true) {

		char string[1000];

		char *p;


		signal (20, SIG_IGN);
		signal (2, SIG_IGN);
		

		printf("prompt $ ");

		p = fgets(string, 1000, stdin);

		if (p == NULL) {

			perror("error reading command");

			exit(1);

		}

		handle_command(p);
 //función a la que llamo para ejecutar el código anterior
	}



	exit(0);

}
Mi problema es que cuando abro dos ventana y trato de matar una, me mata las dos a la vez o me pone stopped las dos a la vez. ¿Como puedo enviar la señal a una sola aplicación?

Etiquetas: procesos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:41.