Я использую скрипт 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. Тем не менее, интересно, что это работает в этом случае, не меняя ничего внутри скрипта.