|
|
1
41
不要混在一起
使用自我管道技巧。这会将任何信号转换为信号
然后,类似waitpid的函数如下所示:
你可以从中看到
|
|
|
2
32
Fork是一个中间子级,它派生真实的子级和一个超时进程,并等待其所有(两个)子级。当一个退出时,它会杀死另一个并退出。
出人意料的简单:) 如果您确定程序中没有其他模块正在监视自己的子进程,甚至可以省略中间子进程。 |
|
|
3
17
我发现 sigtimedwait 我能做到。 谢谢马克·爱丁顿的建议。我已经在Ubuntu16.04上测试了你的例子,它可以正常工作。
好的,Mark Edington的示例代码是 here :
|
|
|
4
5
|
|
|
5
3
|
|
|
6
2
|
|
|
7
2
由于环境的原因,我绝对需要在主线程中运行这个函数,而使用self-pipe技巧或eventfd并不是很简单,因为我的epoll循环在另一个线程中运行。所以我找到了其他堆栈溢出处理程序。请注意,一般来说,用其他方式这样做要安全得多,但这很简单。如果有人想评论它到底有多糟糕,那我洗耳恭听。 笔记 :绝对有必要阻止任何线程中的信号处理,但要在其中运行此线程的线程除外。我默认这样做,因为我认为在随机线程中处理信号很麻烦。
编辑 |
|
|
8
2
请检查以下代码片段以了解详细信息
|
|
|
9
2
如果您的程序仅在当代Linux内核(5.3或更高版本)上运行,则首选的方法是使用
|
|
|
10
1
为了避免竞争条件,您应该避免做任何比在信号处理程序中更改易失性标志更复杂的事情。 我认为对你来说最好的选择是向父母发出信号。waitpid()然后将errno设置为EINTR并返回。此时,您检查waitpid返回值和errno,注意您已收到一个信号并采取适当的措施。 |
|
|
11
0
libkqueue
项目模拟
使用
Linux上的幕后操作
|
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |