top显示有七个线程 但是测试用例答案是六个 有些疑惑

看起来好像是应该要等一会儿spawn_child.bin结束之后是六个 但是测试用例是瞬间跑完的,因此输出七个

    yang 你好,请问你的七个process是哪些呢?

    • yang replied to this.

      ds_ssj 就主要是cpu1上面 idle在running,有一个线程在ready queue里面还没被调度,所以就打印出来有七个

        yang 你好,您所说的spawn_child.bin是在哪里调用的?测试中没有调用,只是调用ipc_mem.bin

        • yang replied to this.

          ds_ssj sorry我之前说错了 应该是ipc那个启了个client 然后因为top瞬间执行的,那个client还没和server完成调用 就是我说的那个cpu1上,还是idle在running,client没被调度的时候,top是七个,然后过了一会儿client完成ipc退出之后就是六个了

            yang 你好,shell执行程序的时候,由于不是background执行的,所以应该是等该程序执行完了,再执行shell下一个top命令的

            • yang replied to this.

              ds_ssj 诶不对啊...按照这样的话,我测试了一下发现是5啊,哪来的6个?过程如下:

              初始的时候:
              cpu0有root和fs sever
              其他三个cpu都是idle

              此时run ipc-mem,若是等待他执行结束再top,也是初始状态的五个线程,如果不等直接返回再top,那么是七个(ipc-mem会启动自己的server

              你们测试会通过我猜测是因为没有实现等待命令执行结束就返回,这样会导致启动了ipc-mem,但是ipc-mem还没来得及调用spawn启动他的server,此时就是六个,我也测试了一下不等待直接返回的情况,结果如下:
              Dr7AG4.jpg]
              top之后才有那句create the server process

              我按照你说的等待cmd执行结束再返回写了一下代码实验了一下,实现大概是加了一个系统调用判断线程是否结束:
              Dr7rWQ.jpg
              这样严格等待执行结束才会readline,结果是五个

              Write a Reply...