如何实现“nohup java 流程号一直在变”1. 整体流程
在这项任务中,我们需要实现的目标是改变Java过程的过程编号。为了实现这一目标,我们可以遵循以下步骤:
nohup
命令后台运行Java程序3。检查Java程序的进程号是否在变化。4.如果进程号没有变化,重启Java程序接下来,我们将详细说明每一步需要做什么,并提供相应的代码和注释。
2. 操作步骤2.1 编写Java程序首先,我们需要编写一个Java程序,它将继续输出程序号。以下是一个示例程序:
public class ProcessIdPrinter { public static void main(String[] args) { while (true) { System.out.println("当前流程号:" + ProcessHandle.current().pid()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}
使用上述代码ProcessHandle.current().pid()
获取当前Java进程的进程号,并每隔一秒打印一次。
使用nohup
该命令可以在不受终端关闭影响的情况下在后台运行该程序。以下是运行Java程序的命令:
nohup java ProcessIdPrinter > /dev/null 2>&1 &
上面的命令将ProcessIdPrinter
类输出重定向到/dev/null
,并将标准错误输出重定向/dev/null
,最后使用&
符号将程序放入后台。
为了检查Java程序的过程号是否在变化,我们可以使用它ps
命令获取目前正在运行的Java进程号,并与之前保存的进程号进行比较。以下是检查过程号是否正在变化的代码:
#!/bin/bash# 获取过程号old_pid=$(ps -ef | grep "java ProcessIdPrinter" | grep -v grep | awk '{print $2}')# 检查过程号是否在变化whilele truedo new_pid=$(ps -ef | grep "java ProcessIdPrinter" | grep -v grep | awk '{print $2}') if [[ "$old_pid" == "$new_pid" ]] then echo "流程号没有变化,重启Java程序" kill -9 $new_pid nohup java ProcessIdPrinter > /dev/null 2>&1 & else echo "流程号发生了变化" old_pid=$new_pid fi sleep 5done
使用上述代码ps -ef
命令获取所有正在运行的过程,然后使用grep
命令过滤出我们的Java程序进程,然后使用它awk
命令提取流程号。然后,使用无限循环连续检查流程号是否发生变化。如果流程号没有变化,重启Java程序。
journey title 如何实现“nohup java 进程号一直在变” section 编写Java程序 编写Java程序,该程序将继续输出程序号 section Java程序使用nohup命令后台运行 使用nohup命令将Java程序放在后台运行 section 检查过程号是否发生变化 不断检查Java程序的进程号是否发生变化。如果没有变化,重启Java程序
4. 时间计划图gantt dateFormat YYYY-MM-DD title 时间计划图 section 编写Java程序 完成时间 :2021-01-01, 2d section Java程序使用nohup命令后台运行 完成时间 :2021-01-03, 1d