点击上方"IT牧场",选择"设为星标"技术干货每日送达!
原文链接:https://www.jianshu.com/u/21add3dce532
现象描述
大概1个月多以前 在启动脚本中增加了tail -f
用来启动后追踪日志判断是否启动成功
后发现无法执行shutdown.sh(卡住 利用curl) 然后无奈使用kill -9
但通过ps -el 发现此时进程变为defunct 即僵尸进程
当时的解决办法无奈 只能找到僵尸进程的父进程kill
当时认为可能是tail的问题 后来启动脚本中去掉tail 发现问题解决
But
当时一直没有来得及排查是如何引起僵尸进程的问题
这两天抽时间排查了一下 发现和tail没有一毛钱关系
艰难的排查过程1-尝试复现
测试代码Defunct.java
import java.util.concurrent.TimeUnit;public class Defunct { public static void main(String[] args) { while (true) { System.out.println("test defunct"); try { TimeUnit.SECONDS.sleep(30); } catch (InterruptedException e) { e.printStackTrace(); } } }}
启动脚本start.sh
#!/bin/ba