Каково функциональное различие между этими двумя командами для того, чтобы запустить приложение?
$ screen -d -m -S myapp "/opt/myapp-dir/myapp --some-params"
$ (/opt/myapp-dir/myapp --some-params &)
Принятие программы находится внутри /opt
и чтения/записи из/в /tmp
и /var/myapp-data
.
screen
- эмулятор терминала, который объединяет несколько виртуальных терминалов в один. Когда вы запустите команду screen
, ваша программа начнет работать в окне виртуального терминала screen
(вы можете назвать окно с опцией -t
). Теперь вы можете отсоединиться от мультиплексора в любое время (используя C-a C-d
, предполагая привязки по умолчанию) и вернуться в любое время и (повторно) подключиться к тому же сеансу screen
, используя screen -rD
(или аналогичное в зависимости от сеанса) status) и получит те же элементы управления
Фоновое изображение внутри подоболочки будет сокращено до SIGHUP
, поскольку родительская оболочка не будет отслеживать внука, но вы не можете (напрямую) отслеживать / контролировать процесс больше, не говоря уже о возможностях подключения, которые предоставляет screen
. Конечно, вы можете проверить состояние процесса с помощью PID (с помощью таких инструментов, как ps
/ top
или напрямую проанализировать /proc/PID/
), но я не знаю, будет ли этого достаточно в вашем случае. Таким образом, если вам нужно увидеть какие-либо выходные данные процесса (при условии, что перенаправление отсутствует) или вы хотите проверить / контролировать процесс, используйте screen
/ tmux
/ byobu
или аналогичные.