void builtin_fg(t_cmd *cmd, UNSEDP t_fds *fd, t_sh *shell) { int pgid; int i; int nb; i = 0; nb = 0; if (shell->process_group == NULL || !shell->jobcontrol) return ; if (cmd->argv[1] != NULL) nb = my_getnbr(cmd->argv[1]) - 1; while ((shell->process_group[i] != NULL) && (i < nb)) i++; if (shell->process_group[i] != NULL) { pgid = shell->process_group[i]->pid.pgid; if (pgid != -1) { SETFLAG(shell->process_group[i]->flags, FLAGPOS(FGRP_FORGROUND)); SETFLAG(shell->process_group[i]->flags, FLAGPOS(FGRP_RUNNING)); if (set_forground_pgrp(pgid) == -1) set_forground_pgrp(shell->pid.pgid); kill(-pgid, SIGCONT); } } }
void no_fg_jobs_status(t_sh *shell) { t_grp *fg_grp; if ((fg_grp = get_forground_grp(shell)) != NULL) { UNSETFLAG(fg_grp->flags, FLAGPOS(FGRP_RUNNING)); UNSETFLAG(fg_grp->flags, FLAGPOS(FGRP_FORGROUND)); set_forground_pgrp(shell->pid.pgid); } }
void set_forground_process_g(t_sh *shell, t_grp *grp) { int i; t_grp *tmp_grp; i = 0; if (shell->process_group == NULL) return ; while ((tmp_grp = shell->process_group[i]) != NULL) { if (tmp_grp == grp) { SETFLAG(tmp_grp->flags, FLAGPOS(FGRP_FORGROUND)); if (set_forground_pgrp(grp->pid.pgid) == -1) set_forground_pgrp(shell->pid.pgid); } else UNSETFLAG(tmp_grp->flags, FLAGPOS(FGRP_FORGROUND)); i++; } }