Linux下java nohup 后台运行关闭后进程停止的原因,不挂断后台运行命令

Linux下java nohup 后台运行关闭后进程停止的原因,不挂断后台运行命令

今天写sh脚本发现一终止命令程序就停止运行了,检查了很久才发现后面少了个&字符导致的!
错误写法:nohup java -jar /home/zdzjar.jar >/home/logs/zdz.out 2>&1
正确写法:nohup java -jar /home/zdzjar.jar >/home/logs/zdz.out 2>&1 &
在后面加上 & 后就会自动退出命令在后台运行了。真是细节决定成败!

-------------------------
nohup 用途:LINUX命令用法,不挂断地运行命令。   

语法:nohup Command [ Arg ... ] [ & ]   

描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。   

如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。
如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。   

退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

nohup命令及其输出文件   

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。
  
该命令的一般形式为:nohup command &   使用nohup命令提交作业   

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:   
nohup command > myout.file 2>&1 &   
在上面的例子中,输出被重定向到myout.file文件中。  
 
nohup java -jar zdzjar.jar > nohup.out 2>&1 &
//关闭进程
ps -aux | grep java
kill -s 9 xxx
xxx代表上一步查出的进程ID

可以直接用一句话执行
ps aux |grep zdzjar.jar |grep -v grep |awk '{print $2}' |xargs kill -9
或者
ps -ef|grep -v grep|grep zdzjar.jar | grep java |awk '{print "kill -9 "$2}'|sh

 

==========================

本人微信公众帐号: 心禅道(xinchandao)

本人微信公众帐号:双色球预测合买(ssqyuce)

<think>嗯,用户问的是如何在Linux系统中将system命令设置为后台运行。首先,我需要明确用户的问题到底是在问什么。他们可能是在运行某个命令时,希望这个命令后台执行,这样他们可以继续使用终端而需要等待命令完成。常见的场景可能是启动一个长时间运行的服务或者脚本。 首先,我应该回忆Linux后台运行命令的基本方法。通常,在命令的末尾加上&符号可以让命令后台运行。例如,`command &`。这样终端会立即返回,而命令后台执行,同时会显示作业号和进程ID。这时候用户可能还需要知道如何管理这些后台作业,比如用jobs命令查看,或者用fg/bg来切换前后台。 然后,用户提到的“system命令”可能是指systemd服务,或者是普通的系统命令。如果是systemd相关的,可能需要用systemctl命令来管理服务,比如`systemctl start service_name`,但用户的问题更倾向于常规命令后台执行,而是系统服务的管理。 接下来,我需要考虑用户是否需要让命令后台运行并且忽略挂断信号,这样即使终端关闭命令会终止。这时候就需要使用nohup命令,比如`nohup command &`。nohup会默认将输出重定向到nohup.out文件,用户可能也需要知道如何自定义输出文件,例如`nohup command > output.log 2>&1 &`。 另外,用户可能对如何查看后台进程的日志感兴趣,或者如何终止这些进程。这时候需要介绍ps、kill等命令。比如用`ps aux | grep command`查找进程ID,然后用`kill PID`结束进程。 还有可能用户希望命令后台运行并且即使退出终端后仍然保持运行,这时候可能需要结合使用disown或者screen/tmux工具。比如在命令后面加上`& disown`,或者使用screen会话来保持进程运行。 然后,我需要参考用户提供的引用内容,看看有没有相关的信息。比如引用[2]提到了systemd的socket配置,引用[3]提到了在终端中使用的一些命令如nl、sort、fold等,引用[4]是关于如何编译运行Java程序的。过这些引用可能和当前问题关联大,但可能需要提到systemd相关的后台服务管理,比如使用systemctl enable来设置服务开机启动,但用户的问题更偏向于临时后台运行命令,而是设置服务。 最后,用户可能需要一些具体的例子,比如如何实际应用这些命令,或者如何处理输出和错误信息,以及如何检查后台任务的状态。需要给出清晰的步骤和示例,确保用户能够按照指导操作。同时,生成的相关问题可能涉及如何管理多个后台任务,如何查看后台任务的输出,如何让任务在断开终端后继续运行等。</think>在Linux系统中将命令设置为后台运行主要有以下几种实现方式,按使用场景分类说明: ### 一、基础后台运行 1. **使用`&`符号** ```bash command & ``` - 立即返回进程ID(PID)和作业号 - 标准输出仍会显示在终端 - 示例:`sleep 60 &`[^3] 2. **查看后台作业** ```bash jobs -l ``` ### 二、持久化后台运行 1. **nohup组合命令** ```bash nohup command > output.log 2>&1 & ``` - `nohup`忽略挂断信号(SIGHUP) - 输出默认重定向到nohup.log - 推荐使用完整重定向格式[^1] 2. **disown命令** ```bash command & disown ``` - 将已有作业从shell作业表中移除 - 配合`&`使用效果更佳 ### 三、高级会话管理 1. **screen工具** ```bash screen -S session_name command Ctrl+a d # 分离会话 screen -r session_name # 恢复会话 ``` 2. **tmux工具(推荐)** ```bash tmux new -s session_name command Ctrl+b d # 分离会话 tmux attach -t session_name # 恢复会话 ``` ### 四、系统服务管理(systemd) ```bash sudo systemctl start service_name sudo systemctl enable service_name # 设置开机启动[^2] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值