Skip to main content
 首页 » 编程设计

python之杀死 python 脚本并查看执行的最后一行

2025年05月04日18telwanggs

我有一个 python 脚本,它在无限循环中工作,该脚本做几件事并使用类中的几个方法,将信息记录到我拥有的几个记录器中,并与 SQS Amazon 队列一起使用。像这样:

A = ClassA() 
B = ClassB() 
C = ClassC() 
 
while True: 
    # pull messages from SQS 
    messages = sqs.pull_messages() 
    logger.info('Pulled messages from SQS') 
    A.do_something(messages) 
    logger.info('Doing something on class A') 
    # download something from the internet 
    data = B.download_something() 
    logger.info('Downloaded something') 
    C.insert_to_database() 

该脚本可以正常工作几天而不会耗尽内存或因为回溯而退出脚本,我在我的 Linux 机器中像这样启动我的脚本:

python script.py & 

几天后,我可以回到盒子,发现脚本仍在运行,但记录器记录了 1 天前的数据,这不是常见的模式,有时脚本在几小时后停止工作,有时在几天后停止工作,但从未得到杀了。

所以我的问题是,有没有一种方法可以调用终止进程 kill pid 并查看发生了什么?启动事后调试器会告诉我脚本在做什么,或者在我杀死它之前它在哪一行?有什么方法可以解决这个问题吗?

请您参考如下方法:

strace 将为您提供系统调用及其响应的 View 。它的级别可能比您喜欢的要低,但它可以让您查看网络调用是否失败、读取是否超时或发生了什么。

在标准的亚马逊 linux 镜像上,strace 可以通过“yum install strace”获得

查找程序“mycommand”

# find the pid 
ps -ef | grep [m]ycommand 
# use the pid from the previous command 
strace -p $thepid