首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Runtime.getRuntime().exec在Tomcat中派生一个进程作为根进程?

为什么Runtime.getRuntime().exec在Tomcat中派生一个进程作为根进程?
EN

Stack Overflow用户
提问于 2013-04-10 20:12:44
回答 1查看 912关注 0票数 2

我正在使用Runtime.getRuntime().exec(...)从Tomcat webapp应用程序中执行python脚本。当我在我的开发环境中(Eclipse通过Sysdeo-Plugin运行我本地的Tomcat (位于/home/me/opt/tomcat)时,一切都很顺利)。当我在生产环境中运行我的webapp时,出现了这个问题(= Debian Squeeze)。

我使用的是官方debian包中的tomcat6。它是使用用户"tomcat6“(通过"ps aux | grep tomcat6”验证)通过/etc/init.d自动启动的。我正在执行我的简单python脚本:

代码语言:javascript
复制
Process p = Runtime.getRuntime().exec("python /home/me/exec-test.py")
p.waitFor();
//read the stdout and stderr

python脚本很简单:

代码语言:javascript
复制
#!/usr/bin/python
import sys, os, getpass

def main(argv):
    print "Working dir: " +os.getcwd()
    userShell = os.environ.get('SHELL')
    print "$SHELL set to: " +userShell
    print "Executing as user: "+getpass.getuser()

if __name__ == "__main__":
    main(sys.argv[1:])

如果从eclipse运行tomcat,则输出为:

代码语言:javascript
复制
Working dir: /home/me/opt/tomcat
$SHELL set to: /bin/bash
Executing as user: me

当使用debian包中的tomcat6运行时:

代码语言:javascript
复制
Working dir: /var/lib/tomcat6
$SHELL set to: /bin/bash
Executing as user: root

为什么python脚本的分支执行是以"root“身份运行的?它不应该是拥有tomcat6进程(=运行JVM)的同一用户吗?我是不是漏掉了什么,或者可能是为了获取进程的user的python调用是不正确的?

我也尝试过使用Apache Commons Exec,也得到了同样的结果。

结果是,当我使用更复杂的python脚本调用本地应用程序(/usr/ local /bin/local-app)时,它在生产环境中失败。不知何故,它无法访问local-app。同样,在我的开发环境中一切正常。这与我的观察结果有关吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-10 20:27:22

getpass.getuser()首先查看环境变量'LOGNAME', 'USER', 'LNAME', 'USERNAME' (按此顺序),然后再尝试其他变量,可能其中一个设置不正确。

尝试使用os.getuid()pwd.getpwuid(os.getuid()) -这应该会给出另一个结果。

我发现进程以某种方式获得root权限是非常不可能的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15925481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档