И фоны хорошо, за исключением программ, которые возвращаются позже и требуют взаимодействия с консолью (например, «apt -y update &», которое в конечном итоге переходит в состояние STOP, так как оно хочет предложить пользователю вопрос «действительно действительно принудительно?» Гораздо позже). .... когда никто больше не смотрит).
Чтобы закрыть эту дыру и сообщить процессу, что терминал действительно никогда не станет доступным для него, я добавляю <& - к некоторым из моих команд, полностью отсоединяя их от активного терминала, говоря, что STDIN больше не возможен. Убедитесь, что / bin / bash - это ваша оболочка, если вы ее используете. Скрипт будет регистрировать любые ошибки, связанные с отсутствием псевдотерминала, на который можно было бы разослать любое приглашение.
Например:
`./runme.sh &> runme.log <&- & disown`
мой окончательный способ отделиться от текущей терминальной сессии. И STDOUT, и STDERR регистрируются в runme.log, не имеет значения, завершится ли раньше ваша консоль или оболочка или если вы выйдете / su на другую учетную запись (без мусора терминала из runme), и благодаря тому, что откроет даже родитель-потомок PID отношения удалены.
ОБНОВЛЕНИЕ: даже с этим у меня были проблемы с семафором, связывающим его с именем исходного родителя, поэтому теперь я рекомендую вместо этого:
at now <<< "(cmd1; cmd2; etc.) &> logfile.log"
Конечно, удалите &>, если вы хотите получать выходные данные из CRON по электронной почте, или перенаправьте все это в / dev / null вместо файла.
screen
) может, среди прочего, использоваться для «обертывания» более длительных процессов. Вы можете отсоединиться от него, вернуться к оболочке, затем снова присоединить и увидеть результаты работы запущенного процесса. Присоединение может быть даже сделано из другого терминала, SSH и т. Д. Также могут быть другие программы, которые позволяют вам делать такие вещи.