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