Java linux中的后台进程
我已经开发了一个Java套接字服务器连接,工作正常 当从终端启动时,它从监听客户端开始。但当我关闭终端时,它就停止了监听 我需要继续,即使用户从jar文件启动的地方关闭了终端Java linux中的后台进程,java,linux,sockets,process,Java,Linux,Sockets,Process,我已经开发了一个Java套接字服务器连接,工作正常 当从终端启动时,它从监听客户端开始。但当我关闭终端时,它就停止了监听 我需要继续,即使用户从jar文件启动的地方关闭了终端 如何在Linux中运行Java server socket应用程序作为后台进程?您是否尝试将&放在命令行的末尾? 例如: java -jar mySocketApp.jar & 您还可以使用bg和fg命令将进程发送到后台和前台。您可以通过CTRL+Z暂停正在运行的进程 查看本文:试试看 java -jar yo
如何在Linux中运行Java server socket应用程序作为后台进程?您是否尝试将&放在命令行的末尾? 例如:
java -jar mySocketApp.jar &
您还可以使用bg和fg命令将进程发送到后台和前台。您可以通过CTRL+Z暂停正在运行的进程
查看本文:试试看
java -jar yourApp.jar &
&
将启动新的进程线程,我还没有对此进行测试,但如果它仍然不起作用,则在脚本文件中twite它,并以&
启动我。在命令末尾添加&
后,需要做一件至关重要的事情。进程仍链接到终端。运行java命令后,需要运行disown
java -jar yourApp.jar > log.txt &
disown
现在,您可以关闭终端。有几种方法可以实现此目的:
nohupjava-server myApplication.jar>/log.txt
-这非常简单。它只会将应用程序放在后台。这会起作用,但这不是一个很好的方法init.d
中,并具有常规启动、停止和状态命令所需的运行级别。如果需要,我可以提供一个例子nohup
是很好的选择
广告2:
可以找到许多项目使用的最佳脚本
对于Debian/Ubuntu,可以使用基于start-stop-daemon
的非常简单的脚本。如果怀疑有/etc/init.d/skeleton
可以修改
#!/bin/sh
DESC="Description"
NAME=YOUR_NAME
PIDFILE=/var/run/$NAME.pid
RUN_AS=USER_TO_RUN
COMMAND=/usr/bin/java -- -jar YOUR_JAR
d_start() {
start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND
}
d_stop() {
start-stop-daemon --stop --quiet --pidfile $PIDFILE
if [ -e $PIDFILE ]
then rm $PIDFILE
fi
}
case $1 in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
*)
echo "usage: $NAME {start|stop|restart}"
exit 1
;;
esac
exit 0
这里需要的关键短语是“守护进程”。有没有想过为什么Linux/Unix上的系统服务器进程通常以“d”结尾?由于历史原因,“d”代表“daemon” 因此,分离并成为真正的服务器进程的过程称为“守护化” 它是完全通用的,不仅限于Java进程 要成为一个真正独立的守护进程,您需要完成几个任务。它们列在维基百科页面上 你需要担心的两件事是:
- 从父进程分离
- 从创建进程的tty分离
大多数人只需使用一个小shell脚本来启动java进程,然后在后台模式下使用“&”来完成java命令。然后,当启动脚本进程退出时,java进程仍在运行,并将从现在已死亡的脚本进程中分离。步骤1。 创建新屏幕的步骤
screen -RD screenname
第2步。
进入屏幕终端
按回车键
第3步。
在新打开的终端中运行命令或脚本(在后台运行)
第4步。
从屏幕终端出来
ctrl+A+D
第5步。
列出屏幕终端
screen -ls
这将打印如下内容
在以下位置有一个屏幕:
994.screenname(2018年10月12日上午09:24:31)(独立)
1个插座输入/运行/屏幕/S触点。
第6步。
要登录到后台进程
screen -rd 994.screenname
谢谢你的回答。我想选择方案2。如果你能给我举个例子,那个命令对我不起作用,我需要的是
java-jaryourapp.jar>log.txt&
使用ubuntu,而不是&