gpt4 book ai didi

c - sigaction() 的使用

转载 作者:太空狗 更新时间:2023-10-29 17:22:24 24 4
gpt4 key购买 nike

我必须向进程发送两个信号,SIGUSR1SIGUSR2,以便修改程序中的特定 bool 变量 (SIGUSR1 将其设置为 trueSIGUSR2 将其设置为 false)。所以我写了一个 signalHandler() 函数来控制 SIGUSR1SIGUSR2 的行为。问题是:如何设置 sigaction() 来处理这个特定的任务?我在 Google 上花了很多时间,到处都读到我应该使用 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

最佳答案

参见 sigaction(2)手册页。那里都有描述。

基本上,您可以设置 sa_handlersa_sigaction,具体取决于您是否需要额外的信号信息。

如果设置的是后者,则需要在flags中添加SA_SIGINFO。否则,对于您的情况,标志可能应该为 0。您可能希望系统调用在被信号中断时因 errno EINTR 而失败(默认行为),因此您可以在重新启动它们之前考虑变量的新值,但如果您最终想要重新启动它们自动(selectpoll 永远不会重新启动),您可以设置 SA_RESTART 标志。

sa_mask 是信号处理程序运行时应延迟的一组信号。您至少应该设置两个信号,这样如果它们快速连续出现,它们就不会混淆。

最后一个 sa_restorer 已过时且未被使用。

关于c - sigaction() 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8573842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com