Добрый вечер, не могу разобраться как пользоваться setpgid мне нужно присвоить новому процессу группу отличную от родителя, чтобы при нажатии cntl+Z вставал на паузу только процесс вызванный с помощью execve а мой псевдо bash продолжал работу. Помогите пожалуйста разобраться
void ft_infinit_pipe2(t_exectoken *head, t_memory *q)
{
int p[2];
pid_t pid;
int fd_in;
char *rt;
int status;
fd_in = 0;
ft_file_create(head);
rt = NULL;
while (head)
{
if (pipe(p) == -1 || (pid = fork()) == -1)
{
ft_putstr_fd("ERROR pipe or fork", 2);
exit(1);
}
else if (pid == 0)
{
if (head->left != NULL)
{
dup2(p[1], 1);
close(p[1]);
}
if (head->file_opt)
ft_fd_flag(head->file_opt, &fd_in);
dup2(fd_in, 0);
close(p[0]);
if (ft_whatis2(head, q) == 0)
{
exit(0);
}
else
rt = hash_get(head->file_args[0], 0);
if (rt != NULL)
ft_start_exe(rt, head->file_args, pid);
exit(0);
}
else
{
g_pid = pid;
// setpgid(g_pid, getpgid(g_pid) + 100);
signal(SIGINT, ft_fork_signal);
// signal(SIGSTOP, SIG_IGN);/////?????
// signal(SIGTSTP, ft_fork_signal);////cntrl+Z
// printf("%spid: %d%s\n", RED, pid, RESET);
if (g_pid != -1)
waitpid(pid, &status, 0);
// printf("%sstatus: %d%s\n", RED, status, RESET);
if (WIFEXITED(status))
{
g_exit_code = WEXITSTATUS(status);
if (rt == NULL)
g_exit_code = 127;
// printf("%sExit status of the child was %d%s\n", YEL, g_exit_code, RESET);
}
close(p[1]);
fd_in = p[0];
head = (head)->left;
}
}
}