免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1568 | 回复: 2
打印 上一主题 下一主题

mysql编程在多进程环境下的错误,希望与各位探讨 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-02 12:05 |只看该作者 |倒序浏览
在用mysql的c api进行多进程编程时,有类似如下的代码:

for (int i=0; i<sysconf(_SC_OPEN_MAX); i++) close(i);

open_log_file();
open_mysql_connection();

pid_t pid = fork();
if (pid==0)
{
    /* 子进程代码 */
}

else if (pid>;0)
{
    /* 父进程代码 */
}

close_mysql_connection();


如果在子进程中关闭数据库连接,则父进程的连接也被关闭,所以在子进程不能关闭继承而来的数据库连接;

如果子进程不关闭数据库连接,则子进程不能使用数据库连接对应的文件描述符,否则,比如在上面代码中,log的文件描述符为0,数据库连接为1,如果子进程调用printf(),则数据库连接丢失。

为了避免这种情况,只好在子进程中增加如下代码:

for (int i=0; i<sysconf(_SC_OPEN_MAX); i++) close(i);
open_log_file();


我不是很清楚造成这种情况的原因,但我认为这是不合理的。

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2004-12-02 13:59 |只看该作者

mysql编程在多进程环境下的错误,希望与各位探讨

原帖由 "woh" 发表:
在用mysql的c api进行多进程编程时,有类似如下的代码:

for (int i=0; i<sysconf(_SC_OPEN_MAX); i++) close(i);

open_log_file();
open_mysql_connection();

pid_t pid = fork();
if (pid==0)
{
..........


这是合理的

论坛徽章:
0
3 [报告]
发表于 2004-12-03 17:13 |只看该作者

mysql编程在多进程环境下的错误,希望与各位探讨

子进程在没有使用任何IPC或者网络通信的情况下就影响了父进程,居然还称之为合理?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP