Один из следующих 2 должен работать:
$ nohup redshift &
или
$ redshift &
$ disown
Посмотрите следующее некоторое время больше информации о том, как это работает:
man nohup
help disown
Различие между nohup, отрицайте и и (убедиться прочитать комментарии также)
Один из следующих 2 должен работать:
$ nohup redshift &
или
$ redshift &
$ disown
Посмотрите следующее некоторое время больше информации о том, как это работает:
man nohup
help disown
Различие между nohup, отрицайте и и (убедиться прочитать комментарии также)
Если Ваша программа уже работает, можно приостановить ее с Ctrl-Z
, вытяните его в фон с bg
и затем disown
это, как это:
$ sleep 1000
^Z
[1]+ Stopped sleep 1000
$ bg
$ disown
$ exit
disown
не разъединяет stdout или stderr. Однако nohup
делает, как делает >/dev/null
(разъедините стандарт), 2>/dev/null
(разъедините стандартную погрешность). Это (disown
) управление заданиями разъединений.
– ctrl-alt-delor
22.07.2016, 01:08
bg
купленный это назад выполнение. Я не могу сделать следующего шага ввода disown
потому что существует слишком много вывода для ввода чего-либо.
– John Mellor
20.09.2017, 18:47
Можно выполнить процесс как это в терминале
setsid process
Это запустит программу на новой сессии. Как объясненный http://hanoo.org/index.php?article=run-program-in-new-session-linux
nohup.out
. 2) Это не остается в списке задания Вашей оболочки, таким образом, это не создает помехи выводу jobs
.
– Mikel
07.11.2012, 00:24
Хороший ответ уже отправляется @StevenD, все же я думаю, что это могло бы разъяснить его немного больше.
Причина, что процесс уничтожается после завершения терминала, состоит в том, что процесс Вы запуск является дочерним процессом терминала. После того как Вы закрываете терминал, это уничтожит эти дочерние процессы также. Вы видите дерево процесса с pstree
, например, при выполнении kate &
в Konsole:
init-+
├─konsole─┬─bash─┬─kate───2*[{kate}]
│ │ └─pstree
│ └─2*[{konsole}]
Сделать kate
процесс, отсоединенный от konsole
когда Вы завершаете konsole
, использовать nohup
с командой, как это:
nohup kate &
После закрытия konsole
, pstree
будет похож на это:
init-+
|-kate---2*[{kate}]
и kate
выживет.:)
Альтернатива использует screen
/tmux
/byobu
, который будет поддерживать в рабочем состоянии оболочку, независимую от терминала.
У меня есть сценарий к:
Я использую его главным образом для gedit
, evince
, inkscape
и т.д. это все имеет большой раздражающий терминальный вывод. Если команда заканчивается прежде TIMEOUT
, статус выхода nohup возвращается вместо нуля.
#!/bin/bash
TIMEOUT=0.1
#use nohup to run the command, suppressing its output and allowing the terminal to be closed
#also send nohup's output to /dev/null, supressing nohup.out
#run nohup in the background so this script doesn't block
nohup "${@}" >/dev/null 2>&1 &
NOHUP_PID=$!
#kill this script after a short time, exiting with success status - command is still running
#this is needed as there is no timeout argument for `wait` below
MY_PID=$$
trap "exit 0" SIGINT SIGTERM
sleep $TIMEOUT && kill $MY_PID 2>/dev/null & #ignore "No such process" error if this exits normally
#if the command finishes before the above timeout, everything may be just fine or there could have been an error
wait $NOHUP_PID
NOHUP_STATUS=$?
#print an error if there was any. most commonly, there was a typo in the command
[ $NOHUP_STATUS != 0 ] && echo "Error ${@}"
#return the exit status of nohup, whatever it was
exit $NOHUP_STATUS
примеры...
>>> run true && echo success || echo fail
success
>>> run false && echo success || echo fail
Error false
fail
>>> run sleep 1000 && echo success || echo fail
success
>>> run notfound && echo success || echo fail
Error notfound
fail
Хотя все предложения работают хорошо, я нашел свою альтернативу использовать Экран
, программа, которая устанавливает виртуальный терминал на вашем экране.
Вы можете рассмотреть возможность начать его с экрана Session_Name
. Экран может быть установлен практически на всех производных Linux и Unix. Удар Ctrl + A и (нижний регистр) C начнется вторая сессия. Это позволит вам переключаться взад-вперед между начальным сеансом, ударив Ctrl + A и 0 или более новая сессия, ударяя Ctrl ] + А и 1 . Вы можете иметь до десяти сессий в одном терминале. Раньше я начинал сеанс на работе, пойти домой, SSH в мою рабочую машину, а затем вызвать Security_rame Session_Name
. Это воссоединит вас к этому удаленному сеансу.
Вы можете настроить процесс (PID) так, чтобы он не получал сигнал HUP при выходе из системы и закрытии сеанса терминала. Используйте следующую команду:
nohup -p PID
Возможно, аналогично ответу, предложенному apolinsky, я использую вариант на screen
. Ванильная команда выглядит так
screen bash -c 'long_running_command_here; echo; read -p "ALL DONE:"'
Сессия может быть отключена с помощью Ctrl ACtrl D и снова подключена в простом случае с помощью screen -r
. У меня это завернуто в сценарий под названием session
, который живет в моем PATH
, готовый для удобного доступа:
#!/bin/bash
#
if screen -ls | awk '$1 ~ /^[1-9][0-9]*\.'"$1"'/' >/dev/null
then
echo "WARNING: session is already running (reattach with 'screen -r $1')" >&2
else
exec screen -S "$1" bash -c "$@; echo; echo '--------------------'; read -p 'ALL DONE (Enter to exit):'"
echo "ERROR: 'screen' is not installed on this system" >&2
fi
exit 1
Это работает только тогда, когда вы заранее знаете, что хотите отключить программу. Он не предусматривает отключение уже запущенной программы.
Я предпочитаю:
(applicationName &)
например: {{1 }} linux @ linux-desktop: ~ $ (chromium-browser &)
Обязательно используйте круглые скобки при вводе команды!
Как и в других ответах, опубликованных ранее,можно перевести запущенный процесс в использование screen
задним числом благодаря reptyr , а затем закрыть терминал. Шаги описаны в этом посте . Шаги, которые нужно предпринять:
bg
disown
процесс screen
сеанс reptyr
, чтобы взять на себя управление процессом
redshift & disown
) работавший для меня на Ubuntu 10.10. Это, кажется, хорошо работает, помещая все это на одну строку. Есть ли какая-либо причина, что я не должен делать этого? – Matthew 13.11.2010, 02:52nohup redshift &
таким образом, это делает фон). И помещение второго на одной строке прекрасно, хотя обычно Вы отделяетесь с;
(redshift &; disown
) – Michael Mrozek♦ 13.11.2010, 05:14;
и&
разделители команды и имеют одинаковый приоритет. Единственной разницей является синхронное по сравнению с асинхронным выполнением (соответственно). Нет никакой потребности использовать&;
в предпочтении только к&
(это работает, но это немного избыточно). – Chris Johnsen 13.11.2010, 06:29redshift &!
будет сразу отрицать красное смещение. – 21.04.2013, 21:30