PID команд запускаются от имени другого пользователя

343
S. Murawski

Будучи пользователем root, я хочу запустить службу от имени конкретного пользователя и записать ее PID-файл. Минимальный нерабочий пример:

if [ $UID -eq 0 ]; then  su myuser <<EOF  sleep 30 &  echo $! >mypid.pid  EOF fi  

После выполнения файл mypid.pid пуст, $! тоже пусто, но у моего пользователя есть спящий процесс с назначенным pid (очевидно). Я полагаю, что это потому, что новая оболочка порождается и как-то не отслеживает свою историю. Могу ли я заставить его работать?

0

1 ответ на вопрос

0
Sami Laine

Because you feed the shell invoked by su(1) from a script, $! gets interpreted by the script calling su(1). The way to prevent this is to escape $!, then $! does get fed to the shell invoked by su(1) and not the calling script:

if [ $UID -eq 0 ]; then su myuser <<EOF sleep 30 & echo \$! >mypid.pid EOF fi