Mil*_*ilo 14 unix bash pid eval process
我在bash脚本中有与此类似的命令:
eval "( java -classpath ./ $classname ${arguments[@]} $redirection_options $file )" &
pid=$!
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,ps $pid它会显示主脚本进程而不是java程序的进程.
当我省略eval时,它获得了正确的过程,但为了使一些复杂的参数正常工作,我需要使用它.
知道如何在eval命令中执行时获取java程序的PID吗?
pil*_*row 30
你的&符号是eval行的背景,导致(顶级)shell分叉子,子shell到eval字符串,然后作为顶级shell的孙子运行你的java程序.因此,$!报告子shell的pid,这是最近的后台命令.
而是在你的eval中移动背景:
eval "(java ...) &"
pid=$!
Run Code Online (Sandbox Code Playgroud)
只要括号不够复杂到成为子壳,上面就可以了.