在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,意味着流的结束。
如果您在Eclipse中运行该程序,Eclipse将启动该程序。这意味着您需要以root身份登录,或者您需要重新配置eclipse以使用sudo
。
作为root登录比较容易,因为它不需要额外的工作;然而,它也是更危险的,因为你将系统暴露在程序中的错误以及eclipse程序中的错误。
在sudo
下运行意味着您可能并不总是有一个控制台。安装程序后,情况会更加如此。我建议你现在做这项工作只是让它登录到一个文件,就好像你正在处理1000个以下的端口套接字一样,你是在编写一个各种各样的守护进程,并且它会(在完成之后)例行地发布缺乏控制台的环境。
我的程序与串行交互,但我没有任何时候打开该串行连接,所以它是在eclipse中通过控制台更容易使用stdin。当它在生产中时,我将要通过串口并且根本不会使用stdin。 – 2014-10-26 17:34:53
@ChristopherSmith好吧,所以你使用的是串口,而不是网口。 Linux上的要点是一样的。有一些程序的控制台和程序不支持。如果你想在没有控制台的情况下启动,你不能使用stdin,stderr和stdout。如果你使用'sudo','/ bin/sh'等命令,你有时会得到缺乏控制台的进程。如果你想通过可能不提供控制台的包装来启动它,最好编写你的程序不要假设stdin。无论是,还是最好运行以root身份登录的程序(交互式会话通常都有控制台)。 – 2014-10-26 17:55:00
这不是一个守护进程,用户正在运行命令'sudo java
当你说你需要使用stdin,你的意思是你想管“|”输入到您的Java应用程序中? – Leon 2014-10-26 17:02:07
我不知道你是什么意思管“|”但我想用控制台/终端输入纯文本System.in – 2014-10-26 17:03:09
这应该“只是工作”。你能提供一个代码示例并描述你所得到的行为吗? – Leon 2014-10-26 17:04:54