当前位置: 首页 > 面试题库 >

Linux C:接收到信号后,是否可以知道发送者的PID?

乐正浩言
2023-03-14
问题内容

假设我的C程序处理SIGUSR1。当它接收到信号时,是否可以知道是谁发送的?即 得到那个过程的pid?


问题答案:

是的,如果您使用sigaction调用而不是来设置信号处理程序signal。这样做可以让您设置一个带有三个参数的信号处理程序:

  • An int,代表信号编号(就像signal
  • A siginfo_t *是一种结构,其中包含有关信号源的各种信息,包括发送方的pid(如果适用)。(其中还包括有关自动信号之类的信号原因的信息SIGSEGV。)
  • A ucontext_t *,与哪个线程获得信号有关。大多是可忽略的。


 类似资料:
  • 我试图对goroutines做一个循环,它接受一个接收字符串的通道,每次接收它时,它都应该将值追加到另一个字符串。只有在所有goroutine结束时(goroutine计数应该是传入的的长度),代码才应该继续。

  • 我对邮件服务器和邮件帐户有疑问。 我想知道是否可以向邮件服务器询问邮件帐户在其收件箱中发送或接收的邮件数。 我不知道这是否可以通过pop3/imap/smtp协议或特定的邮件服务器api实现。 可能通过连接到邮件服务器并使用邮件帐户凭据登录,可以通过邮件服务器api或协议获取此信息。 任何想法?

  • 我正在尝试将一个复杂的对象从服务器传递到客户端。我的客户端代码如下所示: 而类是: 在服务器上,我使用: 但不管用。如果我从 (“newsearch”上的

  • 问题内容: 是否可以 不 尝试加载就知道是否已加载Java类?尝试加载该类,但我不希望出现这种副作用。还有另一种方法吗? (我不想覆盖类加载器。我正在寻找一个相对简单的方法。) 问题答案: (感谢Aleksi)此代码: 产生: 请注意,示例类不在软件包中。完整的二进制名称是必需的。 二进制名称的一个示例是

  • 我的所有AWS代码(API网关、Lambda、SQS、EC2等)目前都位于Canada Central(ca-Central-1)区域。我计划发送电子邮件使用AWS SES从EC2. 我正在尝试使用本指南在SES中启用电子邮件接收,使用基于我的Route 53域的自定义电子邮件地址(例如,)。然而,我刚刚意识到我所在的地区不支持电子邮件接收,因为它仅在us-east-1、us-west-2和eu-