upstart System.in.read()崩溃了吗?

时间:2015-02-14 04:47:59

标签: upstart

我的java应用程序只有这个:

    System.out.println("waiting for input...");
    PrintWriter writer = new PrintWriter("/home/pc/test-java.txt", "UTF-8");
    writer.println("The first line");
    writer.println("The second line");
    writer.close();
    System.in.read();

文件创建得很好,然后该过程似乎在没有警告的情况下死亡。我在文档中找不到可以解释这种行为的任何内容。我根本不被允许等待输入吗?新贵如何知道我正在尝试阅读输入并阻止它?它为什么关心?我这里只是新手脚本测试。

以下是完整的脚本:

start on runlevel [2345]
stop on runlevel [016]

respawn
respawn limit 2 5

script
    exec java -jar /home/pc/test-0.0.1-SNAPSHOT.jar
end script

1 个答案:

答案 0 :(得分:2)

Upstart documentation for the console stanza的一些相关摘要:

  

对于v1.4之前的所有Upstart版本,控制台的默认值为console none 。自Upstart 1.4起,默认值为console log

     

6.5.1 console log
  将标准输入连接到 / dev / null

     

6.5.2 console none
  将作业的标准输入,标准输出和标准错误文件描述符连接到 / dev / null

     

6.5.3 console output
  将作业的标准输入,标准输出和标准错误文件描述符连接到控制台设备


因此,在所有版本的Upstart中,stdin默认情况下会映射到/dev/null。因此,System.in.read()立即读取文件结束(EOF)并返回。

要获得您想要的行为,请在您的Upstart作业定义中添加console outputconsole owner

start on runlevel [2345]
stop on runlevel [016]

respawn
respawn limit 2 5

console output
# OR
#console owner

script
    exec java -jar /home/pc/test-0.0.1-SNAPSHOT.jar
end script