gushuailove 发表于 2020-10-25 16:47:07

linux多线程卡死问题

在一个linux进程中,开两个线程分别通过lua提供的库函数调用lua虚拟机执行lua脚本,编写两份测试脚本,脚本内容为如下:
    print("status 1".. os.time())
    local cmd="cat /tmp/123.log"
    print("cmd:"..cmd)
    local swc = io.popen(cmd);
    --print("status 2")
    local var
    if swc then
      var=swc:read("*all")
      if var then
            --print("status 3")
--         local port, up = var:match("port:(%d+) link:(%w+)")
--            os.execute("sleep " .. 1)
      end
      swc:close()
    end
    --print("status 4")
    return ;

两份脚本执行的都是cat不同文件,在进程中开两个线程来分别不断的执行这两个脚本,进程很快就会卡死,通过printf打印查看到一个线程在执行lua库中的popen调用,另一个线程在执行close,不明白为什么会有这个问题,在另一台不同cpu不同linux版本相同lua版本的嵌入式设备上并不会出现该问题,对比发现两份linux的popen pclose代码不太一样,但不清楚原因。

进程卡死的时候ps查看进程状态为S,两个线程状态分别为S和Running,CPU占用很高,还请高人指点可能是什么原因。

笑笑我笑了 发表于 2020-10-25 17:58:12

两个脚本是用的两个lua_State吗?

gushuailove 发表于 2020-10-26 10:58:58

笑笑我笑了 发表于 2020-10-25 17:58
两个脚本是用的两个lua_State吗?

是的,用的不同的state,而且脚本操作的文件也是不同的文件

gushuailove 发表于 2020-10-27 13:50:00

结帖:工具链中的bug,该修订在2018年11月3日,目前用的是2018年2月的版本,准备更新2019年版本的工具链。
页: [1]
查看完整版本: linux多线程卡死问题