我在Ubuntu上运行了一个bash脚本。 是否可以在不重启脚本的情况下看到现在执行的行/命令。
问题是脚本有时永远不会退出。这真的很难重现(现在我抓住了它),所以我不能停止脚本并开始调试。
任何帮助都会非常感激
P.S。脚本逻辑很难理解,所以我无法弄清楚为什么它被思想的力量所冻结。
答案 0 :(得分:3)
尝试查找shell的进程ID(pid),您可以使用ps -ef | grep <script_name>
让我们在shell变量$PID
中设置此pid。
通过以下方式查找此$PID
的所有子进程:
ps --ppid $PID
您可能会发现一个或多个(例如,它被卡在一系列流水线的命令中)。重复此命令几次。如果它没有改变,这意味着脚本卡在某个命令中。在这种情况下,您可以将trace命令附加到正在运行的子进程:
sudo strace -p $PID
这将显示正在执行的内容,无论是无限循环(如从管道读取)还是等待一些从未发生过的事件。
如果您发现ps --ppid $PID
更改,则表示您的脚本正在推进,但它已卡在某处,例如脚本中的本地循环。通过更改命令,它可以提示您在脚本中循环的位置。