2015-07-30 1 views
0

Я использую встроенную оболочку (ash) «BusyBox v1.22.1 (2015-02-09 13:48:39 IST)», и я выполнил один скрипт в фоновом режиме, который работал в непрерывном цикле с некоторой задержкой.Не удалось выйти из сеанса telnet из командной строки sh shell

Than, я набрал команду «exit», чтобы выйти из этого сеанса, из которого я запустил один скрипт.

но, я не мог выйти из этой сессии.

Есть ли у кого-нибудь идеи об этом типе или есть какая-либо конфигурация, необходимая в busybox для решения этой проблемы?

+0

Было бы полезно, если бы вы сказали точно, что необходимо для воспроизведения проблемы, а также точно так же, как это произошло. Я предполагаю, что вам нужно убить фоновый процесс, прежде чем вы сможете выйти из системы, используя либо «убить», либо вытащив его на передний план, а затем используя control-C. –

+0

Но я хочу выйти из сеанса telnet, выполнив команду «exit», когда скрипт работает в фоновом режиме. –

+0

Вы хотите сохранить запущенный скрипт в фоновом режиме после окончания сеанса? Тогда ответ Йоахима - это путь! Обратите внимание, что перенаправление вывода имеет специфику оболочки, поэтому проверьте документацию вашей оболочки, если его подход не работает. –

ответ

1

Это связано с тем, что дочерний процесс все еще имеет соединения с оболочкой для ввода и вывода.

Если вы действительно хотите запустить дочерний процесс независимо от родительской оболочки, породившей его, то вам нужно сделать две вещи: первая заключается в использовании команды nohup для запуска программы, вторая - для перенаправления стандартные потоки ввода, вывода и ошибок.

Так что сделайте что-нибудь подобное, например.

$ nohup ./your_program >/dev/null </dev/null 2>&1 & 

Операторы перенаправление работает так:

  • >/dev/null перенаправляет стандартный вывод в /dev/null специального файла, который принимает все, и любой выход и просто отбрасывает его
  • </dev/null перенаправляет стандартный ввод из тех же специальный файл, который заставляет все чтения давать конец файла
  • 2>&1 делает дескриптор файла 2 (стандартная ошибка) таким же, как дескриптор файла 1 (стандартный выход), что означает, что весь вывод на стандартную ошибку будет использоваться стандартным выходом и автоматически будет перенаправлен на /dev/null