问题标签 [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.

0 投票
0 回答
105 浏览

c - 分配给 sigaction 结构的 sa_mask 字段的正确值是什么

上面的代码用 g++ 编译时会报错:

在 sigaction 的手册页中,其定义为 sigset_t sa_mask;我不确定这个 sigset_t 到底是什么。它的可能值是什么。

0 投票
0 回答
88 浏览

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 初始化为空?

0 投票
1 回答
27 浏览

c - sigaction 优先于信号功能吗?

以下来自信号的手册页

signal() 的行为因 UNIX 版本而异,并且在历史上因 Linux 的不同版本而异。避免使用它:改用 sigaction(2)。请参阅下面的可移植性。

这是否意味着我们应该始终使用sigactioncall 而不是 using signal

0 投票
1 回答
218 浏览

c - sa_mask 默认值为空吗?

我正在尝试实现一个信号处理程序,并且想知道是否需要显式清空struct sigaction的sa_mask字段,或者使用默认值对其进行初始化是否就足够了。

0 投票
1 回答
328 浏览

c - sigaction 只捕获一次信号

考虑以下代码:

当这个程序运行时。我第一次按CTRL-C时,它会打印“hi”。
但是第二次程序退出。这可能是什么原因?
我想要的是程序在每次发出信号时都会捕获它。

0 投票
2 回答
343 浏览

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 标头粘贴在此处]

0 投票
2 回答
95 浏览

c - 收到 sigchld 后 Getline 停止工作

我一直在试验信号,但遇到了一个我无法解释的问题。

我在这个简单的 C 程序中重新创建了我的问题,简而言之,我正在使用 getline() 在循环中读取用户输入。用户可以 fork 进程、终止子进程或一起退出主进程。

奇怪的是,如果我 fork 一个子进程然后杀死它,换句话说,输入标准输入:

叉子

我陷入了无限循环,其中以下内容无限期地打印到标准输出(这也表明当孩子被杀时 SIGCHLD 被缓存)

计数器 1

如果我删除信号处理程序,一切似乎都工作正常。我知道 getline() 使用 read() 系统调用并且 SIGCHLD 信号导致它中断,但除此之外,我几乎可以肯定在下一次迭代中 getline() 函数应该可以正常工作。有没有人解释为什么 getline() 停止工作?

(我正在使用 gcc 编译器并在 Ubuntu 20.04 LTS 上执行程序)

0 投票
0 回答
11 浏览

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

0 投票
0 回答
49 浏览

c - 为什么我的 SIGFPE 信号处理程序只调用一次?

此代码产生以下输出:

为什么信号处理程序只调用一次?我使用 raise() 调用来避免发生被零除时得到的核心转储。这两种情况下的行为是不同的(核心转储假定调用了默认处理程序),但它们都没有多次调用信号处理程序?任何想法为什么?

0 投票
1 回答
68 浏览

c - 客户端 - 使用信号 SIGUSR1、SIGUSR2 传输文本的服务器程序

服务器

客户

屏幕截图显示了工作、程序的结果。在第一种情况下,我多次致电客户。在第二个有很多文字。显然,在这两种情况下,来自服务器的响应信号都不会消失。为什么?我无法理解 在此处输入图像描述在此处输入图像描述