我正在运行一个作为守护进程运行的 Java 脚本。当我输入 时,我看到该进程作为守护进程运行jps
。我不想将该程序作为守护进程运行,因为我正在考虑它由 cron 作业自动运行。如果我这样做,我会看到许多守护进程将在后台运行,所以我想停止它。任何人都可以回答这个问题,因为 Java 程序必须运行,但不能作为守护进程运行。
我正在使用这个命令:
java -cp $CP com.sdp.cloudwatch.DevAWSCloudWatch
在此之前我使用过:
nohup java -cp $CP com.sdp.cloudwatch.DevAWSCloudWatch &
为了避免程序作为守护进程运行,我删除了它nohup &
,但即使我nohup &
从上面的命令中删除它,它仍然作为守护进程运行。
答案1
我怀疑它并没有真正作为守护进程运行。一个真正的守护进程必须再次 fork、setsid 和 fork(以及一些其他的 jiggery pokery),而这不能从 java 内部完成。
您更可能的意思是您调用的进程没有退出。
您唯一实用的选择是重写 java 代码。
答案2
我假设您正在使用脚本来启动 java 进程;在这种情况下,它是您想要控制的脚本(作为重复实例运行)。
您可以创建一个临时文件并将其锁定。即使仍然存在打开的窗口,事情可能会发生变化,但它通常会起作用,因为您将每隔几分钟安排一次脚本。
看着 :防止重复的 cron 作业。