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:
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: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;
Código:
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? 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); }