我有一个bash脚本中的命令类似于:
eval "( java -classpath ./ $classname ${arguments[@]} $redirection_options $file )" & pid=$!
但是,如果我做了一个ps $pid,它会显示主脚本进程,而不是java程序的进程.
当我省略eval时,它获得正确的过程,但是为了使一些复杂的参数正常工作,我需要使用它.
任何关于如何在eval命令中执行java程序的PID的想法?
您的&符号是对eval行进行背景化,导致(顶级)shell分支一个子代,子shell对该字符串进行评估,反过来将您的java程序作为顶级shell的孙子运行.所以,$!报告子shell的pid,这是最近的背景命令.
而不是在你的eval中移动背景:
eval "(java ...) &" pid=$!
只要括号不够复杂,成为一个子壳,上面的工作就可以了.
原文地址:https://www.jb51.cc/bash/386277.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。