juboosnov 发表于 2014-01-06 17:21

程序内部调用system执行sqlldr卡死

几年前的老的PC程序,现在改了一个小逻辑重新编译之后就跑不通了,卡在sqlldr执行的地方几天没反应。测试发现文件数据只有几条的时候能执行,上了几千条就不能执行了。相关代码是:
char v_Command = "\0";
sprintf( v_Command,"sqlldr userid=%s control=%s log=%s readsize=6553600 bindsize=6553600 silent=header,feedback direct = false",g_struConn.g_DbStr,g_log_FileInfor.file_name,v_Log_File );
if ( system(v_Command)!=0 )
……

openspace 发表于 2014-01-07 08:28

单执行 sqlldr 会怎样?

juboosnov 发表于 2014-01-07 09:52

回复 2# openspace


单独执行sqlldr正常,1W条1秒就导完了。最新测试结果是文件记录在几十条的时候程序能正常运行通sqlldr正常,上了几千条就要卡起。

openspace 发表于 2014-01-07 10:10

把system替换成exec执行正常吗?

juboosnov 发表于 2014-01-08 10:09

回复 4# openspace


用execlp能正确执行了

juboosnov 发表于 2014-01-08 10:52

回复 4# openspace


    改成fork+execlp又卡了,卡在fork这里,fork为什么会卡呢

openspace 发表于 2014-01-08 11:02

可以这样试一下
主进程 fork
然后子进程再 fork
再 fork 出来的子进程来执行这个程序
看看之前的 fork 有没有卡住

juboosnov 发表于 2014-01-08 11:20

回复 7# openspace

注释掉execlp及相关的处理,仅仅是fork后printf信息,也是无反应


   

openspace 发表于 2014-01-08 12:40

回复 8# juboosnov


    普通的 fork 都不行了?
    进程数量有限制?该一下系统上限试试
   
页: [1]
查看完整版本: 程序内部调用system执行sqlldr卡死