【发布时间】:2010-09-26 02:23:33
【问题描述】:
我有一个 Perl 脚本,它读取命令文件并在必要时通过以下方式自行重启:
myscript.pl:
exec '/home/foo/bin/myscript.pl';
exit(0);
现在,除了一个问题外,这一切正常。读取命令文件的线程无权访问我使用的 DBI 句柄。在多次重新启动后,我似乎建立了打开的 mysql 连接的数量,直到我得到可怕的“连接太多”错误。 DBI 规范说:
“由于这个(可能是临时的)限制,新创建的线程必须自己连接到数据库。句柄不能跨线程共享。”
有什么方法可以关闭连接,或者有什么方法可以重新启动脚本?
【问题讨论】:
-
你知道
exit(0)只有在exec失败时才能到达,对吧? -
是的,我确实意识到了这一点。我也尝试用 system 替换 exec。
-
你在哪里关闭你的数据库句柄?
-
我使用了 EXIT_FLAG 解决方案。分离主线程中的所有其他线程,关闭数据库句柄并退出。
标签: mysql database multithreading perl restart