New submission from Antoine Pitrou: The documentation for multiprocessing.exitcode says: """ The child’s exit code. This will be None if the process has not yet terminated. A negative value -N indicates that the child was terminated by signal N. """
This is true for the "fork" method, but not "forkserver" where a child terminated by a signal will get an exitcode of 255. This is because forkserver relies on the child writing its own exit code in a pipe, which obviously doesn't work if it was killed (255 is simply a fallback value). See forkserver's Popen.poll(): def poll(self, flag=os.WNOHANG): if self.returncode is None: from multiprocessing.connection import wait timeout = 0 if flag == os.WNOHANG else None if not wait([self.sentinel], timeout): return None try: self.returncode = forkserver.read_unsigned(self.sentinel) except (OSError, EOFError): # The process ended abnormally perhaps because of a signal self.returncode = 255 return self.returncode ---------- components: Library (Lib) messages: 295343 nosy: davin, pitrou, sbt priority: normal severity: normal status: open title: With forkserver, Process.exitcode does not get signal number type: behavior versions: Python 3.5, Python 3.6, Python 3.7 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue30589> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com