我正在一个 linux 系统上工作,其中未处理的 python 异常导致脚本挂起而不是退出堆栈跟踪。我意识到它似乎取决于脚本的路径。例如,这按预期工作
$ echo 'raise Exception("This is a test exception.")' > test-exception.py
$ python test-exception.py
Traceback (most recent call last):
File "test-exception.py", line 1, in <module>
raise Exception("This is a test exception.")
Exception: This is a test exception.
但这无限期挂起
$ python $PWD/test-exception.py
如果我通过按 CTRL-C 发送进程 SIGINT,那么堆栈跟踪将照常打印并且程序返回。
我无法在其他各种机器上复制这种行为,所以我怀疑这台机器是 fubar 并且某些系统调用正在挂起。这是 strace 输出的最后几行
$ strace python $PWD/test-exception.py
[... snip]
munmap(0x7f33193d8000, 266240) = 0
brk(0x24a9000) = 0x24a9000
brk(0x24e1000) = 0x24e1000
close(4) = 0
socket(PF_FILE, SOCK_STREAM, 0) = 4
connect(4, {sa_family=AF_FILE, path="/var/run/abrt/abrt.socket"}, 27
这是怎么回事?为什么 argv[0] 改变异常处理?