例如,bashdebugging器是否支持附加到现有进程并检查当前状态?
或者我可以通过查看/ proc中的bash进程条目轻松find它们吗? 有没有一个方便的工具来给活动文件的行号?
我不想杀死并重新启动这个过程。
这是在Linux – Ubuntu 10.04。
我最近发现自己处于类似的位置。 我有一个shell脚本不能通过其他方式识别(如参数等)
有很多方法可以找到更多关于正在运行的进程的信息。
使用lsof -p $pid
来查看打开的文件,这可能会给你一些线索。 请注意,某些文件在“已删除”时,仍然可以通过脚本保持打开状态。 只要脚本没有关闭文件,它仍然可以读写,文件仍然占用文件系统的空间。
使用strace
主动跟踪脚本使用的系统调用。 该脚本将读取脚本文件,以便在执行之前可以看到一些命令。 使用此命令查找read
命令:
strace -p $pid -s 1024
这使命令打印长达1024个字符的字符串(通常, strace
命令会截断比这更短的字符串)。
检查目录/proc/$pid
以查看有关脚本的详细信息; 特别要注意的是,请参阅/proc/$pid/environ
这会给你由null分隔的进程环境。 要正确读取这个“文件”,使用这个命令:
xargs -0 -i{} < /proc/$pid/environ
您可以将其转换为less
的文件或将其保存在文件中。 还有/proc/$pid/cmdline
但可能只会给你shell的名字(例如-bash
)。
没有真正的解决 但在大多数情况下,脚本正在等待子进程终止:
ps --ppid $(pidof yourscript)
你也可以在shell中设置信号处理程序:skript切换打印命令:
#!/bin/bash trap "set -x" SIGUSR1 trap "set +x" SIGUSR2 while true; do sleep 1 done
然后使用
kill -USR1 $(pidof yourscript) kill -USR2 $(pidof yourscript)
使用pstree
来显示脚本正在调用的是哪个linux命令/可执行文件,例如, 21156
是我的挂起脚本的pid:
ocfs2cts1:~ # pstree -pl 21156 activate_discon(21156)───mpirun(15146)─┬─fillup_contig_b(15149)───sudo(15231)───chmod(15232) ├─ssh(15148) └─{mpirun}(15147)