我们从Python开源项目中,提取了以下3个代码示例,用于说明如何使用os.WCOREDUMP。
def processEnded(self, reason=None): """ When we are told the process ended, try to notify the other side about how the process ended using the exit-signal or exit-status requests. Also, close the channel. """ if reason is not None: err = reason.value if err.signal is not None: signame = self._getSignalName(err.signal) if (getattr(os, 'WCOREDUMP', None) is not None and os.WCOREDUMP(err.status)): log.msg('exitSignal: %s (core dumped)' % (signame,)) coreDumped = 1 else: log.msg('exitSignal: %s' % (signame,)) coreDumped = 0 self.session.conn.sendRequest(self.session, b'exit-signal', common.NS(networkString(signame[3:])) + chr(coreDumped) + common.NS(b'') + common.NS(b'')) elif err.exitCode is not None: log.msg('exitCode: %r' % (err.exitCode,)) self.session.conn.sendRequest(self.session, b'exit-status', struct.pack('>L', err.exitCode)) self.session.loseConnection()
def print_exit_status(process, printer): exit_signal = None exit_code = None core_dumped = False try: wait_result = os.waitpid(process.pid, 0)[1] if os.WIFSIGNALED(wait_result): exit_signal = os.WTERMSIG(wait_result) exit_code = 128 + exit_signal elif os.WIFEXITED(wait_result): exit_code = os.WEXITSTATUS(wait_result) core_dumped = os.WCOREDUMP(wait_result) except ChildProcessError: # Must be Windows; waiting for a terminated process doesn't work (?) exit_code = process.returncode if exit_signal is not None: signal_name = signal_names.get(exit_signal, 'unknown signal') printer.print( Fore.RED + 'Terminated by %s (%i)' % (signal_name, exit_signal) + Style.RESET_ALL) exit_code = 128 + exit_signal if core_dumped: printer.print(Fore.RED + 'Core dumped' + Style.RESET_ALL) return exit_code
def post_send (self): ''' This routine is called after the fuzzer transmits a test case and returns the status of the target. @rtype: Boolean @return: Return True if the target is still active, False otherwise. ''' if not self.dbg.isAlive(): exit_status = self.dbg.get_exit_status() rec_file = open(self.crash_bin, 'a') if os.WCOREDUMP(exit_status): reason = 'Segmentation fault' elif os.WIFSTOPPED(exit_status): reason = 'Stopped with signal ' + str(os.WTERMSIG(exit_status)) elif os.WIFSIGNALED(exit_status): reason = 'Terminated with signal ' + str(os.WTERMSIG(exit_status)) elif os.WIFEXITED(exit_status): reason = 'Exit with code - ' + str(os.WEXITSTATUS(exit_status)) else: reason = 'Process died for unknown reason' self.last_synopsis = '[%s] Crash : Test - %d Reason - %s\n' % (time.strftime("%I:%M.%S"), self.test_number, reason) rec_file.write(self.last_synopsis) rec_file.close() return self.dbg.isAlive()