0

我正在一个 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] 改变异常处理?

4

0 回答 0