问题标签 [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 - 服务器使用信号 SIGUSR1 和 SIGUSR2 从客户端接收和显示字符串无法处理大量符号
我有一个学校的任务,我需要编写一个客户端,它将使用信号(仅 SIGUSR1 作为 1 或 SIGUSR2 作为 0)向服务器发送字符串,然后服务器应该显示这个字符串。问题是服务器通常只能处理少量的符号。在其他情况下,它会在客户端暂停或仅显示奇怪的符号。我尝试使用客户端中的全局变量以不同方式编写以从服务器确认(有和没有暂停客户端),使用usleep()
(100/600/1000/10000),使用pause()
,结果总是与我快速调用时相同客户一次又一次。
我正在使用 VirtualBox Ubuntu 编写它。
UPD:sleep (5)
使用而不是pause()
在客户端解决问题并增加到usleep()
1000
客户:
服务器:
c - 获取 sigaction 结构
尝试借助 Visual Studio 2019 在我通过 ssh 连接的 Raspberry Pi 机器上构建 paho_c_pub.c。<signal.h> 中的代码使用structure sigaction
编译器不可见:
在控制台中构建代码时没有这样的错误:
Visual Studio C 项目配置有什么问题?
signals - 使用 .NET 应用程序中的 sigaction 忽略 SIGTERM 等 linux 进程信号
我对 .NET 互操作不是很熟悉。我正在尝试使用对 .NET 的调用来实现忽略 .NET 中的 linux 进程信号sigaction
。
我可以提出的互操作定义如下:
在尝试编写忽略 SIGTERM 的示例实现时,我尝试
Marshal.AllocHGlobal
这是在:上引发错误System.ArgumentException: Type 'myProject.sigaction' cannot be marshaled as an unmanaged structure; no meaningful size or offset can be computed
。
我的互操作定义错了吗?我在做一些没有意义的事情吗?
c - SIGINFO 的 si_pid 在多次调用同一函数后将自身设置为 0
我正在开发一个简单的项目,该项目使 2 个进程使用信号相互通信。更具体地说,我将sigaction与标志SA_SIGINFO一起使用,以便每个进程都可以识别谁向它发送了信号并进行回复。问题是,在他们互相调用几次之后(它可能会发生很大变化,有时会发生在 3 次交换之后,其他时候会发生在 700 次之后),siginfo 返回一个等于 0 的 si_pid。这是我用来让他们交流的两个代码。一、“服务器”
第二,“客户”
笔记:
如果我删除该行
if (info ->si_pid != 0)
,则未接收信号的进程将永远暂停(呃!),有趣的是,另一个进程继续运行,就像它永远接收信号一样(不是杜赫!)。我环顾四周以了解如何使用 sigfillset 或 sigaddset 来防止在我的处理程序仍在工作时出现任何传入信号,似乎没有什么能破坏这种行为。
如果您想知道,我正在 MacBook 上运行这个程序。
我还在 Linux(基于 Ubuntu 的发行版)上运行了这些程序,但那里没有“错误”。这对我来说似乎很奇怪。
如果你想测试代码,这很简单:用不同的名称(例如
gcc -o server server.c && gcc -o client client.c
)编译每个程序,首先运行服务器,然后使用服务器的 PID 作为参数运行客户端。在我因使用带有信号的printf而受到抨击之前,我知道在 printf 执行期间信号中断的情况下不建议这样做(请参阅如何避免
printf()
在信号处理程序中使用?),但理论上,处理程序在发出信号时完成,所以它应该运作良好。我尝试使用write函数,它具有相同的行为。
如果你有任何线索,我可以按照这个在没有打嗝的情况下工作,我将非常感激。