以不同用户身份运行的命令的 PID

以不同用户身份运行的命令的 PID

当我以 root 身份启动服务时,我想以特定用户身份启动服务并写入其 PID 文件。最小的非工作示例:

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

执行后,文件 mypid.pid 为空,$! 也为空,但有一个分配给我的用户的进程处于休眠状态(显然如此)。我推测这是因为生成了一个新的 shell,但不知何故它没有跟踪其历史记录。有什么办法可以让它工作吗?

答案1

su(1)因为你从脚本中传入 调用的 shell ,$!所以 会被调用的脚本解释su(1)。防止这种情况的方法是转义$!,然后$!才会被传入 调用的 shellsu(1)而不是调用脚本:

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

相关内容