|
The last argument,oldset,is used to return information about the old process signal mask. If you just want to change the mask without looking at it,pass a null pointer as theoldsetargument. Similarly,if you want to know what's in the mask without changing it,pass a null pointer forset(in this case thehowargument is not significant). Theoldsetargument is often used to remember the previous signal mask in order to restore it later. (Since the signal mask is inherited overforkandexeccalls,you can't predict what its contents are when your program starts running.)
If invokingsigprocmaskcauses any pending signals to be unblocked,at least one of those signals is delivered to the process beforesigprocmaskreturns. The order in which pending signals are delivered is not specified,but you can control the order explicitly by making multiplesigprocmaskcalls to unblock various signals one at a time.
Thesigprocmaskfunction returns0if successful,and-1to indicate an error. The followingerrnoerror conditions are defined for this function:
EINVAL
- Thehowargument is invalid.
You can't block theSIGKILLandSIGSTOPsignals,but if the signal set includes these,sigprocmaskjust ignores them instead of returning an error status.
Remember,too,that blocking program error signals such asSIGFPEleads to undesirable results for signals generated by an actual program error (as opposed to signals sent withraiseorkill). This is because your program may be too broken to be able to continue executing to a point where the signal is unblocked again. See section.
SIGALRMsignals that sets a flag whenever a signal arrives,and your main program checks this flag from time to time and then resets it. You can prevent additionalSIGALRMsignals from arriving in the meantime by wrapping the critical part of the code with calls tosigprocmask,like this:
/* This variable is set by the SIGALRM signal handler. */
volatile sig_atomic_t flag = 0;
int
main (void)
{
sigset_t block_alarm;
...
/ Initialize the signal mask. /
sigemptyset (&block_alarm);
sigaddset (&block_alarm,SIGALRM); (编辑:网站开发网_马鞍山站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|