Зависит от того, что точно Вы делаете, но Ваши опции:
pam_exec
сцепляться в PAM. Ваш исполняемый файл должен отбросить полномочия пользователя root, если это возможно.Попробуйте это
( export a=20; nice -n 10 sh -c 'echo $a' )
JIM=x
JIM=20 nice -n 10 echo $JIM
действительно передает JIM=20
переменная среды к nice
, но это не nice
ни echo
это расширяется $JIM
, это - оболочка.
Оболочка разветвляет процесс и выполняется:
execve("/usr/bin/nice", ["nice", "-n", "10", "echo", "x"], ["JIM=20", other vars])
nice
устанавливает правильность и затем выполняется в том же процессе:
execve("/bin/echo", ["echo", "x"], ["JIM=20", other vars])
Так echo
действительно получает JIM=20
в его среде, но echo
ничего не делает с его средой.
Вы работали:
JIM=20 nice -n 10 sh -c 'echo $JIM'
Затем sh
сделал бы что-то с той переменной среды. Оболочки отображают переменные среды, которые они получают для окружения переменных. Таким образом выше, это sh
установил бы $JIM
переменная к 20
и названный echo
встроенный с 20
как аргумент.
В моем конкретном случае я закончил тем, что сделал сам сценарий renice, примерно так:
JIM=20 sh -c 'renice -n +15 -p $$; echo ${JIM}'