![调试挂起的 bash 进程](https://linux22.com/image/25839/%E8%B0%83%E8%AF%95%E6%8C%82%E8%B5%B7%E7%9A%84%20bash%20%E8%BF%9B%E7%A8%8B.png)
经过今天的一些糟糕表现,我检查了top
:
1 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14229 myuser 20 0 8776 5264 1684 R 99 0.2 1383:47 bash
98-100% 的 Bash 进程使用率应该早就死了(我刚刚关闭了所有终端来验证它)?我不确定是什么原因造成的。
$ lsof -p 14229
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 14229 myuser cwd DIR 0,23 4096 11059271 /home/users/myuser (company.com:/home/users/)
bash 14229 myuser rtd DIR 8,2 4096 2 /
bash 14229 myuser txt REG 8,2 920788 7617113 /bin/bash
bash 14229 myuser mem REG 8,2 30520 657679 /lib/i386-linux-gnu/libnss_compat-2.15.so
bash 14229 myuser mem REG 8,2 13940 657672 /lib/i386-linux-gnu/libdl-2.15.so
bash 14229 myuser mem REG 8,2 1713640 657666 /lib/i386-linux-gnu/libc-2.15.so
bash 14229 myuser mem REG 8,2 121024 660635 /lib/i386-linux-gnu/libtinfo.so.5.9
bash 14229 myuser mem REG 8,2 47040 657683 /lib/i386-linux-gnu/libnss_files-2.15.so
bash 14229 myuser mem REG 8,2 42652 657690 /lib/i386-linux-gnu/libnss_nis-2.15.so
bash 14229 myuser mem REG 8,2 134344 657659 /lib/i386-linux-gnu/ld-2.15.so
bash 14229 myuser mem REG 8,2 92016 657678 /lib/i386-linux-gnu/libnsl-2.15.so
bash 14229 myuser mem REG 8,2 2919792 7748495 /usr/lib/locale/locale-archive
bash 14229 myuser mem REG 8,2 26256 7757442 /usr/lib/i386-linux-gnu/gconv/gconv-modules.cache
bash 14229 myuser 0r CHR 136,1 0t0 4 /dev/pts/1 (deleted)
bash 14229 myuser 1w CHR 136,1 0t0 4 /dev/pts/1 (deleted)
bash 14229 myuser 2w CHR 136,1 0t0 4 /dev/pts/1 (deleted)
bash 14229 myuser 255u CHR 136,1 0t0 4 /dev/pts/1 (deleted)
除了以下几行之外,/dev/pts
这与其他 bash 进程相同:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 6674 myuser cwd DIR 0,23 4096 11059271 /home/users/myuser (company.com:/home/users/)
bash 6674 myuser rtd DIR 8,2 4096 2 /
bash 6674 myuser txt REG 8,2 920788 7617113 /bin/bash
bash 6674 myuser mem REG 8,2 1713640 657666 /lib/i386-linux-gnu/libc-2.15.so
bash 6674 myuser mem REG 8,2 121024 660635 /lib/i386-linux-gnu/libtinfo.so.5.9
bash 6674 myuser mem REG 8,2 47040 657683 /lib/i386-linux-gnu/libnss_files-2.15.so
bash 6674 myuser mem REG 8,2 13940 657672 /lib/i386-linux-gnu/libdl-2.15.so
bash 6674 myuser mem REG 8,2 30520 657679 /lib/i386-linux-gnu/libnss_compat-2.15.so
bash 6674 myuser mem REG 8,2 42652 657690 /lib/i386-linux-gnu/libnss_nis-2.15.so
bash 6674 myuser mem REG 8,2 92016 657678 /lib/i386-linux-gnu/libnsl-2.15.so
bash 6674 myuser mem REG 8,2 134344 657659 /lib/i386-linux-gnu/ld-2.15.so
bash 6674 myuser mem REG 8,2 2919792 7748495 /usr/lib/locale/locale-archive
bash 6674 myuser mem REG 8,2 26256 7757442 /usr/lib/i386-linux-gnu/gconv/gconv-modules.cache
bash 6674 myuser 0r CHR 136,2 0t0 5 /dev/pts/2
bash 6674 myuser 1w CHR 136,2 0t0 5 /dev/pts/2
bash 6674 myuser 2w CHR 136,2 0t0 5 /dev/pts/2
bash 6674 myuser 255u CHR 136,2 0t0 5 /dev/pts/2
标准kill
不起作用:
$ kill 14229 && sleep 1m && kill -0 14229 && echo Alive
Alive
据此ps wafux
它没有子进程。
尝试按照 @ChandraRavoori 的建议追踪它:
$ sudo strace -p 14229
Process 14229 attached - interrupt to quit
之后我没有得到任何输出。我尝试了kill 14229
多次,每次都只打印以下内容:
--- SIGTERM (Terminated) @ 0 (0) ---
还有什么需要检查的前kill -9
?
答案1
尝试
strace -p 14229
我将打印该进程调用的每个系统调用。然后你就会看到这个过程实际上做了什么。
http://try-linux.blogspot.de/2013/12/how-to-strace-process.html
答案2
不知道你是否已经尝试过,但是
ps xal
,它可以给你父进程ID,
你可以杀死父母来恢复。
PS:通常 bash 将 init 进程作为父进程。如果这里也是如此,那么只有标准解决方案,Ctrl + Alt +del(或重新启动)才能解决它。