【发布时间】:2012-07-25 06:11:38
【问题描述】:
我必须制作一个 java 程序,当用户输入 0 时它应该退出。用java代码写没问题。
int cmd = read();
System.out.println("got command : " + cmd);
if (cmd == 48) { // ASCII code for 0
System.exit(0);
我想在 linux 中使用 start-stop 脚本来运行这个过程。我也可以使用& 或nohup 来做到这一点
case "$1" in
'start')
if [ -f myfifo ]; then
rm myfifo
fi
mkfifo myfifo
cat > myfifo &
echo $! > myfifo-cat-pid
java -jar myjar.jar >/dev/null 2>&1 0<myfifo &
echo "Started process: "$!
;;
'stop')
echo 0 > myfifo
echo "Stopped process: "
rm myfifo
;;
esac
我的问题是,一旦我运行此过程,它就会读取输入 -1。虽然我想从 stdinput 读取当somthing明确回显到它时,即调用停止。只是我需要一个程序被shell脚本明确关闭。我已经很努力了。帮帮我。
编辑:
我只想在用户按下 q 或任何此类事件时关闭程序,并且不希望代码中出现无限循环。如果可能的话,任何其他方法(如监听其他事件)也会有所帮助。我的代码不应该轮询事件。我试过Jnotify,它监视一个目录并在该目录中创建或删除文件时引发一个事件。但不幸的是,他们不支持 SunOS。 :(
【问题讨论】:
-
使用 System.in.read();我也尝试过使用 BufferReader
-
hum... 你确定 myfifo 存在并且其中包含任何内容吗? System.in.read() 旨在正常工作...
mkfifo是什么? -
mkfifo 创建一个fifo(队列)。 System.in .read() 正在读取,即使我没有为进程分配任何标准输入。
-
我的理解是,由于fifo中还没有任何东西,所以它到达了EOF。尝试创建 fifo 并在启动 java 程序之前向其中推送一些值,以确保它在有要读取的内容时正常工作。
-
你检查过
myfifo是否存在吗?你能读出来吗?
标签: java shell stdin background-process