14

I have a python script and it will loop through bunch of maya files and do some stuff. But some time maya get seg fault and my script will stop there. I tried with signal and multiprocess. But both failed.

import os, optparse, glob, json, signal
import maya.standalone
import maya.cmds as cmds
from multiprocessing import Process, Queue

def loadMayaBd():
    maya.standalone.initialize(name='python')

def sig_handler(signum, frame):
    print "segfault"

def doSome(args, options):
    signal.signal(signal.SIGSEGV, sig_handler)
    loadMayaBd()
    #from here its just a example
    fileNameList = args[0]
    for eachFile in fileNameList:
        #this is throwing the seg fault
        #I want continue my for llop even if there is any segfault
        #I don't want to exit python coz of that segfault
        cmds.file(eachFile, force = 1, open = 1)

if __name__ == "__main__":
    usage = "usage: %prog [options] args(file list)"
    parser = optparse.OptionParser(usage)
    parser.add_option("-l", "--log", dest="log",
                  help="Log File Path", metavar="LOG_FILE")
    parser.add_option("-v", "--verbose", dest="verbose",
                  help="Print All Logs", metavar="VERBOSE", default=False, action='store_true')
    (options, args) = parser.parse_args()
    if len(args) <= 0:
        errorMsg = "You must pass file path list for crawling"
        raise RuntimeError(errorMsg)
    p = Process(target=doSome, args=(args, options))
    p.start()
    p.join()

Is there any other method which can trap seg fault and continue with next?

mkrieger1
  • 19,194
  • 5
  • 54
  • 65
Achayan
  • 5,720
  • 2
  • 39
  • 61
  • Does this answer your question? [using "try" to avoiding a segmentation fault](https://stackoverflow.com/questions/27950296/using-try-to-avoiding-a-segmentation-fault) – mkrieger1 Dec 26 '21 at 16:09

1 Answers1

11

This works for me:

import os
import signal


def sig_handler(signum, frame):
    print("segfault")


signal.signal(signal.SIGSEGV, sig_handler)

os.kill(os.getpid(), signal.SIGSEGV)

while True:
    pass

Are you sure you are trapping the segfault in each process that you are spawning?

Nico Schlömer
  • 53,797
  • 27
  • 201
  • 249
Andrew Johnson
  • 3,078
  • 1
  • 18
  • 24