linux - Bash:使用不同的用户获取进程的pid

标签 linux bash app-id

我在 bash 中有一个脚本来启动一个 java 程序,我想在程序执行后获取它的 pid。 pid 将保存在文本文件中。

现在我有这样的东西:

if [ "$USER" == "root" ]
then
    su $APP_USER -c "nohup java $JAVA_OPTS  >> $LOG_OUT 2>> $LOG_ERR &"
    su $APP_USER -c "echo $! > $PID_PATH/$CAT.pid"
else
    nohup java $JAVA_OPTS >> $LOG_OUT 2>> $LOG_ERR &
    echo $! > "$PID_PATH/$CAT.pid"
fi

我也这样试过,但都不行。

if [ "$USER" == "root" ]
then
    su $APP_USER -c "(nohup java $JAVA_OPTS  >> $LOG_OUT 2>> $LOG_ERR &); (echo $! > $PID_PATH/$CAT.pid)"
else
    nohup java $JAVA_OPTS >> $LOG_OUT 2>> $LOG_ERR &
    echo $! > "$PID_PATH/$CAT.pid"
fi

当我以我的 APP_USER 身份运行时一切正常,当我以 root 身份运行时我的 java 程序启动但 pid 文件创建为空。

最佳答案

尝试

su $APP_USER -c "nohup java $JAVA_OPTS  >> $LOG_OUT 2>> $LOG_ERR & echo \$! > $PID_PATH/$CAT.pid"
$! 后面的

\ 防止在传递给 su 命令之前扩展变量。

关于linux - Bash:使用不同的用户获取进程的pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16542417/

相关文章:

linux - 使用空格和路径自定义 bash 补全

bash - For循环不工作ffmpeg

xcode - 如何删除由 Xcode 8 自动管理签名创建的应用程序 ID?

php - 如何获取网站的必应搜索API和AppID

android - Facebook、Dropbox 或 Twitter 等开发者网站如何生成 App ID?

python - 为什么 Python "preemptively"在尝试计算非常大的数字时会挂起?

ruby - 在 heroku : `cannot find Chrome binary` 上使用 chrome 驱动程序运行 selenium

linux - 使用 fping 显示事件的主机

c - 程序的行为根据调用 fork 的位置而变化

bash - 如何修复 Debian 6.0 (Squeeze) 上的 Shellshock 漏洞?