一尘不染

如何在Linux中判断哪个进程向我的进程发送了信号

linux

我有一个Java应用程序SIG TERM。我想知道发送此信号的进程的pid。
那可能吗?


阅读 518

收藏
2020-06-03

共1个答案

一尘不染

两种Linux专用方法是SA_SIGINFOsignalfd(),它们允许程序接收有关已发送信号的 非常
详细的信息,包括发送方的PID。

  • 调用sigaction()并传递给它,struct sigaction其中包含所需的信号处理程序,sa_sigaction并且设置了SA_SIGINFO标志sa_flags。使用此标志,您的信号处理程序将接收 三个 参数,其中一个是siginfo_t包含发送者的PID和UID的结构。

  • 从中调用signalfd()和读取signalfd_siginfo结构(通常以某种选择/轮询循环的形式)。内容将类似于siginfo_t

使用哪一个取决于您的应用程序的编写方式。它们可能无法在普通C之外正常工作,而且我也没有希望在Java中使用它们。它们在Linux之外也无法移植。它们也可能是您尝试实现的错误方法。

2020-06-03