Я использую скрипт bash, script.sh
содержащий команду cmd
, запущенную в фоновом режиме:
#!/bin/bash
…
cmd &
…
Если я открываю эмулятор терминала и запускаю script.sh
, cmd
он корректно выполняется в фоновом режиме, как и ожидалось. То есть, пока script.sh
закончился, cmd
продолжает работать в фоновом режиме, с PPID 1.
Но, если я открываю другой эмулятор терминала (скажу xfce4-терминал) от предыдущей (или в начале рабочего стола сессии, которая является моим реальным случаем использования), а также выполнять script.sh
по
xfce4-terminal -H -x script.sh
cmd
больше не выполняется должным образом: он убит прекращением script.sh
. Использование nohup
для предотвращения этого недостаточно. Я обязан поставить sleep
команду после нее, иначе cmd
он погибнет от прекращения действия script.sh
, прежде чем от него отмежеваться.
Единственный способ , которым я нашел , чтобы cmd
правильно выполнить в фоновом режиме, чтобы положить set -m
в script.sh
. Зачем это нужно в этом случае, а не в первом? Почему такая разница в поведении между двумя способами выполнения script.sh
(и, следовательно, cmd
)?
Я полагаю , что в первом случае, режим монитора не активируется, как можно видеть, поставив set -o
в script.sh
.
xterm -e nohup ./script
работает для меня. Может быть проблема с xfce?
xfce4-terminal
или gnome-terminal
. Дело в том, что nohup
это должно быть вставлено в скрипт, мы не хотим, чтобы на весь скрипт влиял nohup
, а просто cmd
. Тем не менее, интересно, что это работает в этом случае, не меняя ничего внутри скрипта.