【发布时间】:2011-12-20 10:14:15
【问题描述】:
我必须向进程发送两个信号,SIGUSR1 和 SIGUSR2,以便修改程序中的特定布尔变量(SIGUSR1 将其设置为 true,@987654325 @ 将其设置为 false)。所以我写了一个signalHandler()函数来控制SIGUSR1或SIGUSR2的行为。问题是:如何设置sigaction() 来处理这个特定的任务? 我在谷歌上花了很多时间,我到处都看到我应该使用sigaction() 而不是过时的signal()。在手册页中我发现了这个
int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);
在signum中我必须输入我想要处理的信号类型,然后我有一个struct sigaction参数:
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
};
在第一个字段中,我认为我应该设置信号处理程序的名称,但我不知道如何设置其他字段。
最后,struct sigaction *oldact有什么用?
【问题讨论】:
-
oldact存储信号编号signum的先前信号处理状态。 -
@moshbear 如果我不想使用它,我可以将它设置为 NULL 吗?
-
__ 是的,你可以。 (请原谅下划线,但 cmets 的最小长度限制为 15 个字符)。
-
@moshbear 谢谢!在这个问题中我看到他只是设置了结构的 .sa_handler 参数,可以吗? stackoverflow.com/questions/5113545/…
-
@Sorcipuppolo:您至少必须将其余部分归零。