加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在bash脚本中,如何在使用eval命令时执行程序获取PID?

发布时间:2020-12-15 18:46:03 所属栏目:安全 来源:网络整理
导读:我有一个bash脚本中的命令类似于: eval "( java -classpath ./ $classname ${arguments[@]} $redirection_options $file )" pid=$! 但是,如果我做了一个ps $pid,它会显示主脚本进程,而不是java程序的进程. 当我省略eval时,它获得正确的过程,但是为了使一些
我有一个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=$!

只要括号不够复杂,成为一个子壳,上面的工作就可以了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读