问题标签 [sigqueue]
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 - C - 当 sigqueue 调用时,Valgrind 报告“Syscall 参数指向未初始化的字节”
有一个程序,其中子进程需要向父亲发送一些信号。然而,valgrind 对 sigqueue call 大喊大叫。现在已经阅读了一段时间,但我找不到答案。
下面是子进程的作用:
这是一个孩子的 valgrind 报告(它在内部 sigqueue 中进行了两次调用,在外部进行了一次调用:
提前致谢。我现在脑残。
编辑: SIGMONEY 和 SIGDONE 分别是 SIGRTMIN 和 SIGRTMIN+1。
c - 父母不会通过 sigqueue 调用接收信号 - C
我正在尝试将信号从子进程发送到 C 中的父进程,并且我有一个信号处理程序设置:
并尝试使用 sigqueue 发送带有附加数据的信号:
问题是,我没有收到任何类型的输出(来自处理程序)并且父进程永远冻结(由于pause()
调用而等待来自子进程的信号),因此我怀疑信号永远不会到达。“子进程结束”将输出到控制台。
有趣的是,如果我通过 发送信号kill()
,父母会很好地接收它,并且处理程序也会打印出附加信息。不幸的是,我需要sigqueue 替代方案,因为我必须向父级发送一个额外的整数作为数据。我读到了可能的信号丢失,因为太多的信号进入并且他们排队,这可能也是我的问题吗?如果是这样,可以做些什么来解决它?非常感谢
c - 如果发送太快则忽略信号
我有以下代码:
会发生什么:有时第二辆救护车的 sigqueue(getppid(), SIGUSR1, signalValueInt); 没有收到,输出类似于以下内容:
- 救护车[20050]结束。// main() 打印出这个
- 救护车[20051]结束。// main() 打印出这个
- // handler() 只用 write() 打印一次!
- 总部回家了!// main() 打印出这个
我知道信号丢失了,因为两个信号一个接一个的来得太快了,而且操作系统。认为这是一个错误重复,所以它被忽略了。
我的问题是:
有没有办法告诉操作系统不要这样做?
我不想为同一目的使用两个不同的信号(例如:SIGUSR1 和 SIGUSR2),我也不想在其中一个子进程中使用延迟。
c - 通过 sigqueue 从父级向子级发送数据
父级决定使用其堆中的内存并通过 sigqueue() 将数据的浅表副本(通过 sival_ptr 发送数据地址)发送给子级。由于两个进程具有不同的地址空间,是否允许子进程访问其父进程地址空间中的数据?如果通过指针对数据的任何访问都是非法的,那么 sival_ptr 的目的是什么?