我有一个Java应用程序SIG TERM。我想知道发送此信号的进程的pid。 那可能吗?
SIG TERM
两种Linux专用方法是SA_SIGINFO和signalfd(),它们允许程序接收有关已发送信号的 非常 详细的信息,包括发送方的PID。
SA_SIGINFO
signalfd()
调用sigaction()并传递给它,struct sigaction其中包含所需的信号处理程序,sa_sigaction并且设置了SA_SIGINFO标志sa_flags。使用此标志,您的信号处理程序将接收 三个 参数,其中一个是siginfo_t包含发送者的PID和UID的结构。
sigaction()
struct sigaction
sa_sigaction
sa_flags
siginfo_t
从中调用signalfd()和读取signalfd_siginfo结构(通常以某种选择/轮询循环的形式)。内容将类似于siginfo_t。
signalfd_siginfo
使用哪一个取决于您的应用程序的编写方式。它们可能无法在普通C之外正常工作,而且我也没有希望在Java中使用它们。它们在Linux之外也无法移植。它们也可能是您尝试实现的错误方法。