Непоследовательное поведение при экспорте PPID в среду на NixOS

Я использовал это в скрипте 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
0
28.09.2020, 12:03
1 ответ

Переменная PPID— это специальная переменная оболочки (, а не переменная среды ), которая отражает значение идентификатора родительского процесса. Значение можно экспортировать в среду, но если оно передается в подоболочку, подоболочка создает новую переменную оболочки PPIDи удаляет PPIDиз списка переменных, которые нужно экспортировать в подпроцесс.

Разница в поведении между различными операционными системами или дистрибутивами объясняется тем, что в одних подпроцессы вызываются через сценарии оболочки-оболочки, а в других нет. Если используется сценарий-оболочка, промежуточная оболочка удаляет PPIDиз среды, но если конечный процесс (Python или nvim )выполняется напрямую, переменная PPIDвсе еще находится в среде.

2
18.03.2021, 23:02

Теги

Похожие вопросы