首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Runtime.exec(Cmd)用户

Runtime.exec(Cmd)用户
EN

Stack Overflow用户
提问于 2014-11-08 23:44:58
回答 2查看 1.8K关注 0票数 0

当我们运行Runtime.exec(cmd)时,将从哪个用户运行它?例如,user1(在Unix上)运行java -jar Test.jar。在这个程序中,我们有Runtime.exec("whoami")。我们会收到哪个用户的身份证?

我有屏幕终端,在那里运行chrootuid,运行java程序。不知怎的,这条公共关系的命令。返回与chrootuid的所有者不同的用户id,其名称为J.p。跑了。有人能解释一下吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-09 00:00:30

正如@SLaks所说,脚本将作为启动JVM的同一个用户运行。

精疲力竭:

  • JVM是在进程中启动的;
  • 这一过程有大量从父进程继承的数据,启动该进程的用户也会继承这些数据;
  • 标准的Java无法修改用户;
  • 即使它具有这样的功能,更改运行中的用户无论如何也需要提升权限。

因此,您可以看到:“分叉”进程将以与JVM相同的凭据运行。

现在,关于运行单独进程的更多信息.

在Java中,您确实希望使用ProcessBuilder而不是Runtime.exec(),原因如下:

  • 它允许你控制I/O输出;
  • 它允许您指定命令行参数“正确的方式”(想想:带空格的参数);
  • 它允许您延迟执行(.start())。

但它显然不允许您对共享资源进行细粒度控制,也不像本机API所能做的那样允许特权修改。尽管如此,ProcessBuilder在很大程度上优于Runtime.exec(),但在流程处理方面还没有发生根本性的变化,因为新的java.nio.file就是File:一场革命。

票数 1
EN

Stack Overflow用户

发布于 2014-11-08 23:54:27

所有子进程都作为父进程的同一个用户运行。

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

https://stackoverflow.com/questions/26823343

复制
相关文章

相似问题

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