/* By: lnikolov <lnikolov@student.42prague.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/21 08:57:54 by ljiriste #+# #+# */
-/* Updated: 2024/08/28 09:54:48 by ljiriste ### ########.fr */
+/* Updated: 2024/08/29 18:21:04 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
}
}
+void killall(t_vec *child_pids, int sig_num)
+{
+ pid_t child_pid;
+ size_t i;
+
+ i = 0;
+ while (i < child_pids->size)
+ {
+ child_pid = *(pid_t *)ft_vec_access(child_pids, i);
+ kill(child_pid, sig_num);
+ ++i;
+ }
+ return ;
+}
+
void wait_for_return(t_execution_env *env)
{
pid_t last_pid;
return ;
last_pid = *(pid_t *)ft_vec_access(&env->child_pids, env->child_pids.size - 1);
waitpid(last_pid, &status, 0);
- if (WIFEXITED(status))
- env->ret_val = WEXITSTATUS(status);
+ if (g_last_signal != 0)
+ killall(&env->child_pids, g_last_signal);
+ if (g_last_signal == 0)
+ if (WIFEXITED(status))
+ env->ret_val = WEXITSTATUS(status);
}
ft_vec_free(&env->child_pids, NULL);
return ;
{
int pipe_fds[2];
+ if (g_last_signal != 0)
+ return (0);
if (pipeline->children.size == 1)
{
if (ex_command(ft_vec_access(&pipeline->children, 0), env))
int res;
res = ex_program(parse_tree, env);
+ if (g_last_signal != 0)
+ {
+ env->ret_val = 128 + g_last_signal;
+ g_last_signal = 0;
+ }
return (res);
}