我正在尝试捕获在子 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
值。使用小写环境变量。