Eu preciso usar a função tcsetgrp
para tornar meu processo de segundo plano em primeiro plano, mas o parâmetro de tcsetgrp
é um descritor de arquivo associado ao meu terminal. Qual é o file descriptor
do meu terminal ou seu valor int?
EDITADO
De acordo com os comentários abaixo, aqui está o trecho do meu programa.
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
void sig_handler(int sig){
printf("The grp get signal is %d\n",tcgetpgrp(0));
}
int main(){
printf("The controllling terminal is %d\n",tcgetpgrp(0));
pid_t pid=fork();
if(pid>0){
signal(SIGINT,sig_handler);
setpgid(pid,pid);
tcsetpgrp(0,getpgid(pid));
//tcsetpgrp(1,getpgid(pid));
printf("Wait is over on %d",wait(NULL));
tcsetpgrp(0,getpgid(getpid()));
//tcsetpgrp(1,getpgid(getpid()));
printf("The parent got control\n");
while(1)
//sleep(1);
printf("Hello\n");
return 0;
}
else{
printf("The controllling terminal is %d\n",tcgetpgrp(0));
printf("The controllling terminal is %d\n",tcgetpgrp(1));
execlp("cat","cat",NULL);
}
return 0;
}
Aqui, o programa cat é o primeiro plano e tudo está funcionando bem.Eu sou capaz de ler do console de entrada e enviar para o console de saída.Mas o problema surge quando eu pressiono *cntrl-c*
meu processo de primeiro plano (cat) mas meu pai é incapaz de obter o controle do terminal mesmo que eu tenha mencionado tcsetpgrp(0,getpid())
após wait()
.Meu prompt de shell vem e meu pai permanece como processo em segundo plano