A correção para isso é corrigir seu aplicativo.
nohup
não envia nada para ninguém. Seu aplicativo, por outro lado, está assumindo que stdin
é um descritor de arquivo aberto válido. Ele deve estar verificando o código de retorno de qualquer primitivo que esteja usando para obter os dados da entrada padrão e reagir de acordo se o fluxo de entrada for fechado ou inválido.
Como você diz cin
, presumo que esteja codificando em C ++.
Esta é uma maneira segura de obter seqüências de caracteres de std::cin
void get_input()
{
std::cout << "getting input" << std::endl;
std::string input;
while (std::cin >> input) {
// Good, got something from cin
std::cout << " * " << input << std::endl;
}
std::cout << "out of input loop" << std::endl;
std::cout << std::cin.eof() << std::endl;
std::cout << std::cin.bad() << std::endl;
}
Esta é uma maneira ruim de obter informações do usuário:
void bad_input()
{
std::cout << "getting input" << std::endl;
std::string input;
while (!std::cin.bad()) {
std::cin >> input; // BAD: not checking if the extractor succeeded
std::cout << input << std::endl;
// do stuff
}
// Not reached if 'std::cin' reaches EOF
std::cout << "out of input loop" << std::endl;
}
Como um fluxo em eof
não é bad()
, isso será repetido para sempre quando cin
atingir a OEF. Existem muitas variações para isso (versões boas e ruins), e problemas semelhantes podem surgir em C simples (e muitas outras linguagens) por razões similares.