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

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

巫研
2023-03-14
问题内容

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


问题答案:

两种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之外也无法移植。它们也可能是您尝试实现的错误方法。



 类似资料:
  • 问题内容: 我认为我的LAMP应用程序中可能发生内存泄漏(内存用完,交换开始使用,等等)。如果我可以看到各个进程使用了​​多少内存,则可以帮助我解决问题。有没有办法让我在* nix中查看此信息? 问题答案: 获得正确的内存使用情况比人们想象的要棘手。我能找到的最好方法是: 其中“ PROCESS”是要检查的过程的名称,而“ TYPE”是以下之一: :常驻内存使用情况,该进程使用的所有内存,包括该进

  • 问题内容: 我可以发送消息给父进程吗? 主 子进程 问题答案: 简而言之: 较长的例子,我前段时间写过:

  • 问题内容: 在终端中,我执行了一个主父进程,该进程将派生一个子进程。在父进程和子进程中,我都实现了SIGINT信号处理程序。因此,当我按“ ctrl + c”时,是否将同时调用两个处理程序?还是我需要在父进程的处理程序中显式调用子进程的信号处理程序? 我查看了这篇文章: Ctrl-C如何终止子进程?表示“ SIGINT信号由终端线路规则生成,并广播到终端的 前台 进程组中的所有进程 ”。我只是不太

  • 我创建了基于JAVA SWT的GUI,它可以与外部C可执行文件进行交互。我的GUI使用ProcessBuilder调用这个c进程。在C进程可执行文件中,我重载了信号函数(CTRL C,CTRL D)。我的问题是如何从JavaSWTGUI向这个外部C进程发送CTRL C?我试过了。getRuntime()。链接中提供了exec((kill SIGINT pid):“如何将SIGINT信号从Java发

  • 问题内容: 我尝试使用删除Linux中的文件,但出现错误: 我如何找出哪个进程正在使用此文件? 问题答案: 您可以使用以下命令: 您将收到使用该文件的进程列表。 您可以对其使用不同的标志,以接收更详细的输出。 您可以在热熔器的Wikipedia文章或页面中找到更多信息。

  • 问题内容: 我有一个VirtualBox进程挂起,试图杀死(/ )但没有成功。父pid为1(初始值)。 显示了记录为“不间断睡眠”的过程。 什么都不显示。 我该如何摆脱呢?它阻止我卸载VirtualBox内核驱动程序以加载较新的驱动程序。 问题答案: 简单的答案:您不能。 更长的答案:不间断的睡眠意味着该过程不会被信号唤醒。它只能被等待的东西唤醒。当我遇到这种情况时。使用CD-ROM时,我通常使用