Quando um programa executado em segundo plano tenta ler a partir do terminal, ele é parado por um sinal SIGTTIN . A entrada está indo atualmente para o processo de primeiro plano¹; seria perturbador se a entrada fosse aleatoriamente para o programa de primeiro plano ou o programa de segundo plano. Então, o programa em segundo plano é suspenso até que seja colocado em primeiro plano.
Se você precisar apenas passar dados para o seu programa no início, envie os dados para ele.
echo "config=foo" | ./my_app &
Se você precisar interagir com o programa de vez em quando, mas ele pode continuar sendo executado sem supervisão na maior parte do tempo, execute-o em um multiplexador de terminal como Tela ou Tmux . Por exemplo, com tela:
screen -S my_app ./my_app
Digite a entrada necessária e pressione Ctrl + A para desanexar a sessão de tela, ou seja, deixe-a rodar em segundo plano e volte ao terminal original. Quando quiser interagir novamente com o programa, reconecte-se à sessão de tela:
screen -S my_app -rd
Se você precisar realizar algumas interações complexas automaticamente, escreva um script espere (ou um script em outro idioma com um biblioteca semelhante).
¹ Grupo de processos, mas não vou entrar nessa sutileza aqui.