我有一个脚本,它运行一个程序,我只想让它每个脚本单独运行一个实例。例如,我有两个脚本“a”和“b”,它们分别运行一个 Java 程序。我只希望脚本“a”和脚本“b”分别运行一个 Java 程序实例。在这种情况下,我无法测试某个可执行文件是否正在运行,因为它是 JVM。启动应用程序后,脚本本身也会退出,所以我无法测试它是否已经在运行。
我可以将正在运行的进程的 PID 写入文件并进行测试,但这样做会引发竞争条件,因为我必须等待程序启动,然后再将 PID 记录到文件中。如果启动脚本运行多次且速度过快,最终会导致程序的多个实例同时运行。此外,还存在一种罕见的情况,即两个实例同时尝试写入 PID 文件,这会引发另一个问题,导致我有一个孤立进程,我根本没有 PID 记录。
什么是从启动脚本中锁定程序的可靠方法,以便我只能从脚本中运行单个实例而不存在竞争条件?
请注意,这并不仅限于运行 Java 程序。这只是一个例子。