如何检查已在UNIX系统下运行的另一个程序实例? exit()
如果是这样的话。
当流程开始时,我已经在file
上使用了pid
。然后我检查pid
它是否存在。但是不时的程序运行时出现意外行为,并且我有大量的程序副本正在运行。
答案 0 :(得分:1)
使用适当的同步机制(例如process shared semaphore),以防止两次启动程序。
答案 1 :(得分:1)
如果要将pid写入文件,则应使用flock序列化对该文件的访问。
答案 2 :(得分:0)
在两个致命的场景中解决方案工作。
1>甚至你的已启动的exe在任务管理器中被安排为javaw.exe。
2 - ;您可以在两个位置安装您的应用程序,从启动这两个位置它也可以。
String tempDir = System.getProperty("java.io.tmpdir");// dependent to OS find any tem dir.
String filePath = tempDir + "lockReserverd.txt";
try {
final File file = new File(filePath);
if(file.exists())
return false;
final RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
final FileLock fileLock = randomAccessFile.getChannel().tryLock();
if (fileLock != null) {
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
try {
fileLock.release();
randomAccessFile.close();
file.delete();
} catch (Exception e) {
//log.error("Unable to remove lock file: " + lockFile, e);
}
}
});
return true;
}
} catch (Exception e) {
//log.Error("Unable to create and/or lock file");
}
return false;