nohup отправляет eof (или некоторые другие данные) информацию о моем приложении при работе рекурсивно. Как остановить или вообще не отправлять?

У меня есть простое небольшое приложение, которое поддерживает взаимодействие cin / cout . Но есть моменты (многие из них), когда я не забочусь об этом взаимодействии и просто хочу запустить свое приложение в фоновом режиме. Поэтому я начинаю с команды, как

 nohup ./myServer >& /dev/null & 

но он ест 100% одного из моих ядер, потому что nohup отправляет eof затем eof или что-то в этом приложении, мое приложение думает, что это тупой пользователь и предлагает ему список команд взаимодействия и ждет нового commad, nohup отправляет eof затем endl снова и так далее рекурсивно.

Таким образом, одно ядро ​​съедается с этим дрянным взаимодействием. Я хочу начать nohup, чтобы он не отправлял никаких данных на мое приложение – no eof , eof и т. Д., Как это сделать?

Как заставить nohup отправлять данные вообще в мое приложение после его запуска?

Исправить это – исправить ваше приложение.

nohup ничего не посылает никому. С другой стороны, ваше приложение предполагает, что stdin является допустимым открытым файловым дескриптором. Он должен проверять код возврата любого примитива, который он использует, чтобы получить данные со стандартного ввода и реагировать соответственно, если входной поток окажется закрытым или недействительным.

Поскольку вы говорите cin , я собираюсь предположить, что вы кодируете на C ++. Это безопасный способ получения строк из 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; } 

Это плохой способ получить пользовательский ввод:

 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; } 

Поскольку поток в eof не bad() , это будет циклически навсегда, как только cin достигнет OEF. Для этого существует множество вариаций (как хороших, так и плохих), и аналогичные проблемы могут возникать на простых C (и многих других языках) по аналогичным причинам.