1
  1. Поскольку фоновое задание все еще может выполняться, даже если пользователь выходит из системы, какой смысл использовать nohup и screen?

  2. В чем разница между CTRL+Z и остановкой для приостановки фонового задания? Есть еще одна команда "Стоп", которая останавливает фоновое задание. Это не убивает задание, но оно не будет продолжаться до тех пор, пока не будет перезапущено. Интересно, в чем разница между "стоп" и CTRL+Z? для "остановки" см. http://www.ece.osu.edu/computing/background_jobs.html#commands

  3. сделать фоновую работу неинтерактивной, это правильно?

command &lt<inputfile> &gt<outputfile>

Что делать, если я хочу добавить вывод в существующий файл, сохраняя задание фона?

3 ответа3

4

Фоновые задания

Обычные фоновые задания не сохраняются после завершения родительской оболочки:

pigpen ~: yes > /dev/null &

Это не переживет выход.

Тем не менее, это будет:

pigpen ~: nohup yes &

nohup позволяет процессу получать сигнал SIGHUP при выходе из системы.

Экран, с другой стороны, поддерживает иллюзию того, что пользователь всегда вошел в систему, и позволяет пользователю в любой момент установить его заново. Преимущество этого заключается в возможности продолжать взаимодействие с программой после ее подключения (это невозможно при использовании только nohup).

Ctrl+C,

Ctrl+C отправляет SIGINT процессу, который он может перехватить и проигнорировать (редко).

Я предлагаю прочитать страницу руководства bash ; в частности, разделы по сигналам и управлению заданиями.

Ctrl+Z

Вы отредактировали свой вопрос, чтобы использовать вместо него Ctrl+Z. Ctrl+Z отправляет сигнал SIGTSTP процессу, приостанавливая его. Этот процесс может быть позже продолжен путем отправки сигнала SIGCONT.

Сигналы SIGTSTP могут быть перехвачены программой и проигнорированы.

Сигнал SIGSTP

Сигнал SIGSTP отличается от сигнала SIGTSTP тем, что он не может быть перехвачен работающей программой. Это поведение идентично поведению необученного SIGTSTP.

Ресурсы

3
  1. Фоновые задания будут продолжаться только в том случае, если вы отсоедините их (я считаю), и вы не сможете получить выходные данные или отправить их позже. Экран позволит вам подключиться к нему позже, как будто вы никогда не покидали его.
  2. Control+c - это прерывание клавиатуры, все, что он делает, это посылает сигнал работающей программе, которая обычно отвечает выходом, но не принудительно. Остановка будет отправлять другой сигнал, когда приложение обычно останавливает свою работу, пока не получит сигнал продолжения (это можно сделать с помощью control+z).
2
  1. фоновая работа умрет, если вы выйдете из оболочки, в которой вы ее запустили. (например, SSH), поэтому вы используете nohup или screen. Если у вас современная оболочка bash, есть команда disown -h. см man-страницу bash для получения дополнительной информации
  2. Ctrl-C и приостановить разные. Ctrl-C завершает процесс.
  3. Чтобы добавить вывод в существующий файл: 1>>/path/existing_file
  4. Ctrl-Z приостановить процесс, перенести его на задний план и вернуть управление вам. Я не знаю точное значение вашей "остановки"
  5. Чтобы добавить вывод и поместить в фоновом режиме: command 1>>/path/existing_file &

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .