Improve 'desktop--emacs-pid-running-p'

* lisp/desktop.el (desktop--emacs-pid-running-p): Avoid false
negatives on MS-Windows and with some symlinks to Emacs
executables.  (Bug#1474)
This commit is contained in:
Eli Zaretskii 2022-03-26 10:28:52 +03:00
parent f7e83d9673
commit de953a6fe3

View file

@ -673,10 +673,26 @@ DIRNAME omitted or nil means use `desktop-dirname'."
owner)))
(defun desktop--emacs-pid-running-p (pid)
"Return t if an Emacs process with PID exists."
"Return non-nil if an Emacs process whose ID is PID might still be running."
(when-let ((attr (process-attributes pid)))
(equal (alist-get 'comm attr)
(file-name-nondirectory (car command-line-args)))))
(let ((proc-cmd (alist-get 'comm attr))
(my-cmd (file-name-nondirectory (car command-line-args)))
(case-fold-search t))
(or (equal proc-cmd my-cmd)
(and (eq system-type 'windows-nt)
(eq t (compare-strings proc-cmd
nil
(if (string-suffix-p ".exe" proc-cmd t)
-4)
my-cmd
nil
(if (string-suffix-p ".exe" my-cmd t)
-4))))
;; We should err on the safe side here: if any of the
;; executables is something like "emacs-nox" or "emacs-42.1"
;; or "gemacs" or "xemacs", let's recognize them as well.
(and (string-match-p "emacs" proc-cmd)
(string-match-p "emacs" my-cmd))))))
(defun desktop--load-locked-desktop-p (owner)
"Return t if a locked desktop should be loaded.