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?