bool QLockFilePrivate::isApparentlyStale() const { qint64 pid; QString hostname, appname; if (getLockInfo(&pid, &hostname, &appname)) { if (hostname.isEmpty() || hostname == QString::fromLocal8Bit(localHostName())) { if (::kill(pid, 0) == -1 && errno == ESRCH) return true; // PID doesn't exist anymore const QString processName = processNameByPid(pid); if (!processName.isEmpty()) { QFileInfo fi(appname); if (fi.isSymLink()) fi.setFile(fi.symLinkTarget()); if (processName != fi.fileName()) return true; // PID got reused by a different application. } } } const qint64 age = QFileInfo(fileName).lastModified().msecsTo(QDateTime::currentDateTime()); return staleLockTime > 0 && age > staleLockTime; }
void TestTools::testProcessNameByPid() { QCOMPARE(qAppName(), processNameByPid(QCoreApplication::applicationPid())); }