问题标签 [sigaction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 分配给 sigaction 结构的 sa_mask 字段的正确值是什么
上面的代码用 g++ 编译时会报错:
在 sigaction 的手册页中,其定义为 sigset_t sa_mask;我不确定这个 sigset_t 到底是什么。它的可能值是什么。
c - 如何发现函数 sigemptyset() 为 sigset_t sa_mask 设置值
我注意到当必须分配一个值时 sigset_t sa_mask
,例如一个空值,我们可以使用该函数
sigemptyset(&sa.sa_mask)
。我在 StackOverflow 上发现了它。
但是当您查看 时man sigaction
,并struct sigaction
没有提到我们将如何为 赋值sa_mask
。
我的理解是对我们来说它是一个未知类型,所以我们不能假设
它是任何东西,而是应该有一些函数可以
帮助我们为 type 分配值sigset_t
。但是手册页
没有提到任何关于sigemptyset
.
如何使用手册页或其他工具发现
您必须使用某些功能,例如sigemptyset
将
sa_mask 初始化为空?
c - sigaction 优先于信号功能吗?
以下来自信号的手册页
signal() 的行为因 UNIX 版本而异,并且在历史上因 Linux 的不同版本而异。避免使用它:改用 sigaction(2)。请参阅下面的可移植性。
这是否意味着我们应该始终使用sigaction
call 而不是 using signal
?
c - sa_mask 默认值为空吗?
我正在尝试实现一个信号处理程序,并且想知道是否需要显式清空struct sigaction的sa_mask字段,或者使用默认值对其进行初始化是否就足够了。
c - sigaction 只捕获一次信号
考虑以下代码:
当这个程序运行时。我第一次按CTRL-C时,它会打印“hi”。
但是第二次程序退出。这可能是什么原因?
我想要的是程序在每次发出信号时都会捕获它。
c - 将 C 代码从 POSIX 移植到 Windows(siginfo 问题)
我正在尝试在 Windows 下本地编译程序“ MRCC ”(为 Linux 开发)。该程序主要是用 Fortran 编写的,而与系统的接口据我所知是用 C 编写的。所有源文件都可以使用 mingw64-gnu 编译器成功编译,除了一个导致问题的 C 源文件。问题出在 mingw64 中未实现的“siginfo_t”类型。
源文件(signal.c)是:
Windows 原生支持 SIGTERM 和 SIGSEGV。但是,SIGINFO 不是,所以没有定义 siginfo_t 类型。编译器还会在 sigaction 处引发错误。我知道我需要更改代码,以便它使用 Windows API 而不是 POSIX API。但是,我不知道该怎么做。我可以用 void 类型替换 siginfo_t 类型吗?我能对 sigaction 做些什么?
[我正在使用的 mingw64 的 signal.h 标头粘贴在此处]
c - 收到 sigchld 后 Getline 停止工作
我一直在试验信号,但遇到了一个我无法解释的问题。
我在这个简单的 C 程序中重新创建了我的问题,简而言之,我正在使用 getline() 在循环中读取用户输入。用户可以 fork 进程、终止子进程或一起退出主进程。
奇怪的是,如果我 fork 一个子进程然后杀死它,换句话说,输入标准输入:
叉子
杀
我陷入了无限循环,其中以下内容无限期地打印到标准输出(这也表明当孩子被杀时 SIGCHLD 被缓存)
计数器 1
如果我删除信号处理程序,一切似乎都工作正常。我知道 getline() 使用 read() 系统调用并且 SIGCHLD 信号导致它中断,但除此之外,我几乎可以肯定在下一次迭代中 getline() 函数应该可以正常工作。有没有人解释为什么 getline() 停止工作?
(我正在使用 gcc 编译器并在 Ubuntu 20.04 LTS 上执行程序)
sigaction - Handling Signal
Would someone please explain to me what this code does? In particular I don't understand the part with the signal handling.
I tried out the code and the result is:
X
D // after 2 seconds
B // after 2 seconds
C // after 4 seconds
A // after 4 seconds
E // after 4 seconds
c - 为什么我的 SIGFPE 信号处理程序只调用一次?
此代码产生以下输出:
为什么信号处理程序只调用一次?我使用 raise() 调用来避免发生被零除时得到的核心转储。这两种情况下的行为是不同的(核心转储假定调用了默认处理程序),但它们都没有多次调用信号处理程序?任何想法为什么?