理解nohup命令
nohup命令的基本概念
nohup是一个常用的Unix命令,用于在忽略挂起信号(SIGHUP)的情况下运行指定的命令或进程。当用户注销或关闭终端时,通常后台运行的进程会收到SIGHUP信号而终止。使用nohup可以避免这种情况,使得进程即使在用户注销后也能继续运行。
nohup的工作原理
nohup通过忽略SIGHUP信号来实现命令的持续运行。当nohup命令被执行时,它会启动一个新的进程,并将该进程的SIGHUP信号屏蔽,这样即使终端关闭,该进程也不会受到影响。
nohup与后台进程的区别
后台进程可以通过在命令后添加&符号来启动,如command &。然而,后台进程在用户注销后通常无法继续运行,因为它们会收到SIGHUP信号。与之相比,nohup启动的进程则不会受到用户注销的影响。
示例:使用nohup启动Java应用
假设我们有一个名为MyApp.jar的Java应用程序,我们希望在后台运行它,即使用户注销或关闭终端,应用也能持续运行。
启动命令
nohup java -jar MyApp.jar &
1
这个命令做了以下几件事:
nohup:告诉系统忽略挂起信号。
java -jar MyApp.jar:实际的Java命令,用于启动JAR文件。
&:将命令放入后台执行。
输出重定向
默认情况下,nohup会将输出重定向到名为nohup.out的文件中。如果需要自定义输出文件,可以使用重定向操作符:
nohup java -jar MyApp.jar > output.log 2>&1 &
1
这里:
>:将标准输出重定向到output.log文件。
2>&1:将标准错误也重定向到同一个文件。
查看进程状态
可以使用ps命令查看nohup启动的进程状态:
ps -ef | grep MyApp.jar
1
停止进程
要停止由nohup启动的进程,可以使用kill命令结合进程ID(PID):
kill -9 PID
1
其中,PID是ps命令查询到的进程ID。
案例源码说明
以下是使用nohup启动Java应用的完整示例,包括启动、输出重定向和进程管理:
启动Java应用
nohup java -jar /path/to/MyApp.jar > /path/to/output.log 2>&1 &
1
查看进程
ps -ef | grep MyApp.jar
1
停止进程
kill -9 $(pgrep -f MyApp.jar)
1
在这个例子中,pgrep -f MyApp.jar用于查找所有与MyApp.jar相关的进程,然后kill -9发送SIGKILL信号以强制终止进程。
原文链接:https://blog.youkuaiyun.com/Java_WuDG/article/details/138141576