On 2024-06-12 01:25, Eli Zaretskii wrote: > - if (! c_isdigit (dot[1])) > + if (! (c_isdigit (dot[1]) > + /* Windows 9X report negative PID values. */ > + || (dot[1] == '-' && c_isdigit (dot[2])))) Faster is "if (! c_isdigit[(dot[1] == '-') + 1])", as it avoids a conditional branch on most platforms. > - else if (0 < pid && pid <= TYPE_MAXIMUM (pid_t) > + else if (pid != -1 && pid <= TYPE_MAXIMUM (pid_t) > && (kill (pid, 0) >= 0 || errno == EPERM) This looks dubious for most systems, where 'kill' has special behavior when pid < -1 or pid == 0; it tests a process group. That's not the test we want here, since we want to check whether Emacs can be sent a signal, not whether any process in its process group can be sent a signal (this can be valid even after Emacs has exited). The code should use calls like kill (-2, 0) and kill (0, 0) only on platforms where we know the calls do not test a process group. Even on MS Windows 98 we should check that TYPE_MINIMUM (pid_t) <= pid. Also, is there a special meaning for kill (0, 0) on MS Windows 98? If so, we should also check that pid != 0. Do any MS-Windows platforms support process groups, i.e., kill (-2, 0) operates on process group 2 rather than on an individual process with process ID -2? If so, these platforms should be careful too, and should not use kill (-2, 0) or kill (0, 0). How about the attached patch instead? You can adjust the Microsoft-specific .h files to define VALID_PROCESS_ID appropriately for MS Windows 98, and for any other MS platform where kill (-2, 0) is known to check for just the individual process -2.