Как запустить команду с терминала, чтобы терминал не был родительским?
Возьмем пример команды "пример-команда".
- Я открываю терминал
- Я пишу
example-command
в терминале, и example-command
выполняется.
- Теперь, если я закрою терминал,
example-command
также будет убит.
- Теперь я пытаюсь использовать "
example-command &
", но такое же поведение.
Как выполнить команду, чтобы при закрытии терминала команда не заканчивалась?
Ответы
Ответ 1
Есть два способа, идентичные по результату.
- Используйте
nohup
при запуске программы. Например, nohup example-command
. Вы можете работать и нормально работать с ним; он просто продолжит работу после того, как вы уйдете.
- В качестве альтернативы как отметил @alamar, если вы используете bash в качестве оболочки, вы можете использовать команду
disown
. К сожалению, насколько я знаю, disown
bash -специфический; если вы используете другую оболочку, такую tcsh
, вы можете быть ограничены формой nohup
выше.
Ответ 2
Сначала найдите аналогичные вопросы.
Помимо способов, перечисленных выше, вы можете:
setsid command_name
Например:
setsid xclock
Спасибо
Ответ 3
В Zsh (не bash) вы можете:
example-command &; disown {pid}
или просто
example-command &; disown
Ответ 4
Вы также можете использовать команду screen.
Ответ 5
nohup example-command
Ответ 6
Вы также можете использовать команды 'at' или 'batch' и дать ему текущее время.
Ответ 7
disown - это встроенный bash. Вы можете создать shellscript-оболочку для своей команды, например
#!/bin/bash
$1 &
P=`which $1`
disown `pidof ${P}`
Не самый надежный script (каким-либо образом), но может помочь вам в этом. Например:
$./launch_script.sh myProgram
Вы также можете сделать это в источнике программы, если вы его редактируете.
Ответ 8
Запуск: пример-команда
Нажмите: Control-Z
Запуск: bg