Я использовал это в скрипте init.d:
su someUserName -c 'screen -S someSesseionName -dm'
После этого вы можете использовать опцию stuff для запуска процессов и других действий в сеансе screen.
export NEWLINE=$(echo -ne '\015')
su someUserName -c "screen -S someSesseionName -p 0 -X stuff 'ls -lash${NEWLINE}'"
В /etc/screenrc могут потребоваться настройки для включения многопользовательского режима, чтобы это работало. Я использовал это в течение многих лет для запуска бесконечных процессов, которые позволяют постоянно взаимодействовать с пользователем на безголовых хостах x86 Linux. Это позволяет пользователям после загрузки -получать доступ к сеансам, присоединяясь к ним как обычные пользователи :
.screen -S someUserName/someSesseionName -x
Переменная PPID
— это специальная переменная оболочки (, а не переменная среды ), которая отражает значение идентификатора родительского процесса. Значение можно экспортировать в среду, но если оно передается в подоболочку, подоболочка создает новую переменную оболочки PPID
и удаляет PPID
из списка переменных, которые нужно экспортировать в подпроцесс.
Разница в поведении между различными операционными системами или дистрибутивами объясняется тем, что в одних подпроцессы вызываются через сценарии оболочки-оболочки, а в других нет. Если используется сценарий-оболочка, промежуточная оболочка удаляет PPID
из среды, но если конечный процесс (Python или nvim )выполняется напрямую, переменная PPID
все еще находится в среде.