如何在运行时停止我的程序作为守护进程?

如何在运行时停止我的程序作为守护进程?

我正在运行一个作为守护进程运行的 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 作业

相关内容