如何获取/bin/su -c 启动的进程的PID

cra*_*h3k 5 linux bash pid

我正在为一个 java 应用程序编写一个 init.d 脚本。但是 java-app 应该由另一个用户运行。

(我使用的操作系统是 Debian Squeeze。)

我已经得到了这个:

/bin/su - $USER - c "cd $PATH;echo $PASSWORD | $JAVA -Xmx256m -jar $PATH/app.jar -d > /dev/null" & PID=$!
/bin/su - $USER - c "echo $PID > $PIDFILE"
Run Code Online (Sandbox Code Playgroud)

但这当然只会保存“/bin/su”进程的pid而不是创建的java进程的pid。

S19*_*19N 3

回显“su”执行的命令中的 PID:

/bin/su - $USER -c "cd $PATH;echo $PASSWORD | \
  $JAVA -Xmx256m -jar $PATH/app.jar -d > /dev/null & echo $! > $PIDFILE"
Run Code Online (Sandbox Code Playgroud)

  • 它是空的,因为 `$!` 是由运行 `su` 的 shell 计算的,而不是 `su` 运行的 shell。如果将 `$!` 更改为 `\$!` 或将双引号更改为单引号,它应该可以工作。 (4认同)