java – 找到一个杀死我的进程的神秘过程

假设我有一些进程 – 在这种情况下是由ant发起的 Java进程.我发现随机的东西正在发送这个Java进程SIGTERM.它可能是将信号发送给自身的过程,也可能是其他信号.

我已经消除了大多数明显的原因(oom杀手,父进程杀死孩子等),但我真的想知道谁发送这个进程SIGTERM.有没有办法在操作系统或流程级别跟踪此行为?

解决方法

你可以通过JNI在你的java程序中安装一个信号处理程序,参见 interface java with C timer library using JNI作为一个例子(捕获SIgalRM,但应该很容易适应).但是在使用java中的信号时要小心一些问题(参见 http://nerds-central.blogspot.de/2011/04/java-jvm-jni-and-signal-handling.html):基本上你需要注意将信号处理程序链接到现有信号处理器而不是替换它们.

如果你怀疑人类交互,另一种方法可能是修改发生这种谜团的机器上的kill可执行文件.将其替换为记录谁登录的shell脚本,其PID和父PID,然后调用原始kill.

我把一些可以在我的电脑上运行的东西放在一起:https://gist.github.com/4183018

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...