应立即用ps定位脚本进程,再通过kill PID、kill -9 PID或pkill -f命令终止;运行前用Ctrl+Z+bg、nohup或screen规范后台管理,并用timeout设置超时保护。

当你在Mac终端里不小心运行了一个持续占用CPU或无法退出的后台脚本(比如死循环的Python脚本、卡住的shell循环、或忘记加&却误按回车启动的长期任务),需要立即中止它,否则可能拖慢系统响应甚至导致风扇狂转。
确认并定位正在运行的脚本进程
打开“终端”,输入:ps aux | grep -v grep | grep python\|sh\|bash\|perl\|node → 回车。这行命令会列出所有疑似脚本类进程(排除grep自身),重点关注USER列是否是当前用户名、%CPU是否异常高、COMMAND列是否包含.py、.sh等后缀或明显可疑路径。
如果脚本是用nohup或screen启动的,它可能不会出现在默认ps结果里,此时改用ps -ef | grep your_script_name,把your_script_name替换成你记得的文件名关键词(如monitor.sh)。
用kill命令精准终止进程
方法一:通过PID直接终止
从上一步输出中找到目标进程那一行最左侧的数字(即PID),例如显示为50234,则执行:kill 50234 → 回车。
方法二:强制终止顽固进程
若执行kill后进程仍在(可用ps再次验证),说明它忽略了普通终止信号,此时改用:kill -9 50234 → 回车。【-9信号不可被捕获或忽略,会立刻结束进程,但可能导致数据未保存或临时文件残留】
方法三:按名称批量终止(慎用)
例如所有名为watch.sh的进程:执行pkill -f "watch.sh"。注意-f匹配完整命令行,若脚本路径含空格或特殊字符,需确保引号包裹准确;误配可能杀掉其他同名无关进程。
防止脚本意外后台常驻
第一步:运行前加Ctrl+Z暂停 → 输入bg转后台前,先用jobs确认当前shell作业列表,避免多个脚本混在一起难以区分。
第二步:真正需要后台运行时,优先用nohup script.sh &或screen -S jobname → ./script.sh → Ctrl+A, D分离,这样后续可用nohup日志追踪或screen -r jobname重新连接,而不是任由脚本裸奔在后台。
第三步:对不确定是否会卡住的脚本,启动时加上超时保护:timeout 300 ./dangerous.sh(单位秒),5分钟后自动终止,避免无限挂起。

















