ec@ttidca.TTI.COM (katz / kowalski) (02/17/89)
I have some questions about certain aspects of signal handling in System V (which may be applicable to other versions). 1). Apparently if a process has a pending signal at the time it does a fork, the forked process also ends up with the same pending signal. Is this result intentional and if so, why would anyone want signals to work this way, i.e., how is this useful? Note that BSD4.3 does NOT work this way. 2). What is the safest way to ensure that a child process starts out "fresh" relative to signals (assuming sigset is used)? One sequence which I believe should work is: (in parent) sighold(sig); /* to prevent the forked process from receiving a signal it is not prepared to cope with */ fork(); sigrelse(sig); (in forked process - prior to exec) signal(sig, SIG_DFL); /* to clear any pending signal and reset the signal action routine. note: sigset does not remove a pending signal */ sigrelse(sig); /* to release any signal hold. note: signal does not remove a signal hold */ exec(..); Is the preceding necessary and sufficient? Thanks for any response. -- Bruce Katz Citicorp TTI 3100 Ocean Park Blvd. (213) 452-9111, x2942 Santa Monica, CA 90405 {csun|philabs|psivax}!ttidca!ec