在Eclipse中以root身份运行Java程序

问题描述:

我需要以root身份运行我的程序。我看着this的问题,它有点作用。我需要使用stdin并使用bash脚本似乎不接受stdin。我正在使用Eclipse和Ubuntu。有任何想法吗?这也会导致其他Java程序出现问题,因为它们也不接受stdin。在Eclipse中以root身份运行Java程序

如果你运行这段代码:

import java.io.IOException; 

public class Test { 
    public static void main(String[] args) { 
     while (true) { 
      try { 
       System.out.print((char) System.in.read()); 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

他们你类型的东西到控制台并按下回车键,它输出你键入的内容

当我使用bash脚本:

#!/bin/bash 
# file: /usr/lib/jvm/java-8-oracle/bin/java 
# descr: Starter for jdk. Runs jdk as root when 
#  cmd-line-arg "--run-as-root" is specified. 
# 
jre="/usr/lib/jvm/java-8-oracle/bin/java.ori" 
run_as_root=false 
args= 

# Filter command-line argument 
for arg in "[email protected]" 
do 
    case "$arg" in 
    --run-as-root) run_as_root=true 
        ;; 
    *)    args="$args $arg" 
        ;; 

    esac 
done 

# Remove leading whitespaces 
args=$(echo $args | sed -e 's/^[ \t]*//') 

if $run_as_root 
then 
    echo "WARNING: Running as root!" 
    gksu "$jre $args" 
else 
    $jre $args 
fi 

我得到了一堆奇怪的字符,当我删除char转换时,我得到-1,意味着流的结束。 enter image description here

+0

当你说你需要使用stdin,你的意思是你想管“|”输入到您的Java应用程序中? – Leon 2014-10-26 17:02:07

+0

我不知道你是什么意思管“|”但我想用控制台/终端输入纯文本System.in – 2014-10-26 17:03:09

+0

这应该“只是工作”。你能提供一个代码示例并描述你所得到的行为吗? – Leon 2014-10-26 17:04:54

如果您在Eclipse中运行该程序,Eclipse将启动该程序。这意味着您需要以root身份登录,或者您需要重新配置eclipse以使用sudo

作为root登录比较容易,因为它不需要额外的工作;然而,它也是更危险的,因为你将系统暴露在程序中的错误以及eclipse程序中的错误。

sudo下运行意味着您可能并不总是有一个控制台。安装程序后,情况会更加如此。我建议你现在做这项工作只是让它登录到一个文件,就好像你正在处理1000个以下的端口套接字一样,你是在编写一个各种各样的守护进程,并且它会(在完成之后)例行地发布缺乏控制台的环境。

+0

我的程序与串行交互,但我没有任何时候打开该串行连接,所以它是在eclipse中通过控制台更容易使用stdin。当它在生产中时,我将要通过串口并且根本不会使用stdin。 – 2014-10-26 17:34:53

+0

@ChristopherSmith好吧,所以你使用的是串口,而不是网口。 Linux上的要点是一样的。有一些程序的控制台和程序不支持。如果你想在没有控制台的情况下启动,你不能使用stdin,stderr和stdout。如果你使用'sudo','/ bin/sh'等命令,你有时会得到缺乏控制台的进程。如果你想通过可能不提供控制台的包装来启动它,最好编写你的程序不要假设stdin。无论是,还是最好运行以root身份登录的程序(交互式会话通常都有控制台)。 – 2014-10-26 17:55:00

+0

这不是一个守护进程,用户正在运行命令'sudo java '。它有一个控制台,这是Eclipse的,cmd.exe或Linux的。生产执行不是问题,只是在使用Eclipse运行时的一部分。我需要stdin与Eclipse和程序以root身份运行。 – 2014-10-26 18:09:45