[python] Problem s forkujicim serverem a SIGTERM signalem

Lumír Jasiok lumir.jasiok na vsb.cz
Středa Prosinec 17 15:25:56 CET 2008


Dobry den,

potreboval bych poradit s nasledujicim problemem. Mam napsany jednoduchy 
forkujici TCP/IP server. Server jako takovy funguje, child procesy se 
vytvareji i ukoncuji korektne, jediny probleme mam s ukoncenim parent 
procesu v okamziku, kdy z (napriklad shellu) zavolam signal SIGTERM. Mam 
osetreno zachyceni signalu a funkci, ktera zajisti, ze se pocka na 
ukonceni vsech child procesu a pak by se mel ukoncit i parent proces 
pomoci sys.exit(0). To se ale nestane, parent proces (server) se 
neukonci, ale skoci do nadrazene while smycky a dale ceka na spojeni a 
je schopen obsluhovat prichozi spojeni. Relevantni kod:

def cleanup(signal,frame):
    """Clean up the server before shutdown.
    """
    # SIGTERM signal
    if signal == 15:
        print "Received SIGTERM signal, waiting for clients termination"
        while True:
            # In case that there isn't any active clients
            if not clients:
                break
        print "toto se vypise"
        sys.exit(0)
        print "toto se nevypise"

# Nadrazena smycka:
 while True:
        # Handle the child temination
        signal.signal(signal.SIGCHLD,reap)

        # Catch the SIGTERM signal
        signal.signal(signal.SIGTERM, cleanup)
        #signal.pause()
        try:
            connection,address = sock.accept()
...

sys.exit(0) se proste neprovede, preskoci se a skoci do nadrazene 
smycky. Kdyz zkusim pouzit strace, vidim, ze se provedou print prikazy, 
ale sys.exit(0) uz ne.

Zkousel jsem i terminaci parent procesu pomoci:

os.kill (pid, signal.SIGKILL), kde pid je PID parent procesu, ale bez 
uspechu.

Nevite co muze byt pricinou problemu?

Lumir

-- 
 Lumír Jasiok
 VSB-TU Ostrava - Computer centre
 E-mail: lumir.jasiok na vsb.cz
 http://www.vsb.cz
															



Další informace o konferenci Python