无法从子 shell 中启动的后台进程捕获 PID,该子 shell 在传递给 `sudo su` 的 Heredoc 中运行

无法从子 shell 中启动的后台进程捕获 PID,该子 shell 在传递给 `sudo su` 的 Heredoc 中运行

我正在尝试捕获在子 shell 中启动的进程的 PID,以便我可以检查该进程是否正确启动,该进程是一个 puma 应用程序。

sudo su - $APPUSER <<-BASH
    PID="\$(bundle exec puma -C config/puma.rb)"

    "\$(bundle exec puma -C config/puma.rb & export PID=$1)"

    "\$(bundle exec puma -C config/puma.rb &)"

    PID="\$(ps aux | grep \"[p]uma.*[u]nix.*$APPNAME\" | awk '{ print \$2}')"
BASH

奇怪的是,它什么也不返回,如果我在没有周围的情况下执行其中任何一个操作,""我会收到此错误:

-bash: line 22: [26740]: command not found

中的数字[]是 pid,我知道这一点是因为当我再次运行脚本时得到这个(我检查 pid 是否存在):

app is running with pid: 26740

我认为发生这种情况是因为我正在heredoc中执行命令并将它们传递给sudo su

如何从子 shell 中启动的后台进程获取 pid。

答案1

您无法覆盖内部PID值。使用小写环境变量。

相关内容