#!/usr/bin/python2.2 from Tkinter import * import os,sys,signal def abortf(): print "aborting child "+str(os.getpid()) os.abort() def onAlarm(signum,stackframe): print "waiting for a child to exit" signal.alarm(5) def onSigchild(signum,stackframe): global cnt (wpid,exitcode)=os.waitpid(-1,os.WNOHANG) if (os.WIFEXITED(exitcode) ): print "The child "+str(wpid)+" exited normally\n" if (os.WIFSIGNALED(exitcode) ): print "The child "+str(wpid)+" exited on a signal\n" cnt=cnt-1 print "The value of cnt is now "+str(cnt) if not cnt: print "All children have exited" def childProg(): root = Tk() root.title('Child Window ') Label(root, text="Press Button to Exit").pack(side=TOP,pady=10) Label(root, text="My PID is "+str(os.getpid())).pack(side=LEFT,pady=10) Button(root, text="Abort", command=abortf).pack(side=RIGHT) Button(root, text="Exit", command=root.quit).pack(side=RIGHT) root.mainloop() n=int(sys.argv[1]) print "Forking "+str(n)+" children" for i in range(1,n+1): processid = os.fork() if (processid): print "spawing child "+str(processid) else: cnt=1 childProg() break if not processid: pass else: global cnt cnt=n print "waiting for all children to exit" tt=0 signal.signal(signal.SIGALRM,onAlarm) signal.signal(signal.SIGCHLD,onSigchild) signal.alarm(5) while 1 : #do some other work if not cnt: sys.exit()