PID de comandos ejecutados como diferentes usuarios

0

Siendo una raíz, quiero iniciar un servicio como usuario específico y escribir su archivo PID. Ejemplo mínimo no laborable:

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

Después de la ejecución del archivo mypid.pid está vacío, $! también está vacío, pero hay un proceso de suspensión para mi usuario con un pid asignado (obviamente). Supongo que se debe a que se genera un nuevo shell y de alguna manera no rastrea su historia. ¿Hay alguna manera de que pueda hacer que funcione?

S. Murawski
fuente

Respuestas:

0

Porque alimentas el shell invocado por su(1) de un guión, $! es interpretado por el script llamando su(1). La forma de prevenir esto es escapar. $!, entonces $! se alimenta al shell invocado por su(1) y no el script de llamada:

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