Bash测试脚本无法终止进程生成核心转储,问题排查求助
问题原因及解决办法
你的脚本问题出在非交互式Shell的作业控制行为差异上:
当你手动逐条执行命令时,处于交互式Shell环境,bash会实时跟踪后台作业,%1这种作业号能正确关联到sleep进程。但在脚本里运行时,bash默认是非交互式模式,作业控制默认禁用,或者bash还没来得及把刚启动的sleep进程注册到作业列表里,导致kill -3 %1无法识别目标进程,自然没法终止它生成core dump。
解决办法:用进程ID(PID)替代作业号
直接获取sleep后台进程的PID,然后用PID来发送信号,这是脚本里更可靠的方式:
修改后的脚本:
#!/bin/bash ulimit -c # 启动sleep后台进程,同时记录它的PID sleep 1000 & SLEEP_PID=$! jobs # 用PID发送SIGQUIT信号(对应kill -3) kill -3 $SLEEP_PID jobs
这样执行脚本就能正常终止sleep进程,验证core dump的生成或禁用效果了。
另外,如果你非要用作业号,也可以在脚本开头加上set -m开启作业控制,但用PID的方式更直接且不易出问题。
内容的提问来源于stack exchange,提问作者James Sullivan
相关产品推荐
相关产品推荐

