V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wenyu1001
V2EX  ›  问与答

程序挂起怎么理解?

  •  
  •   wenyu1001 · 2016-05-18 10:17:19 +08:00 · 2272 次点击
    这是一个创建于 2899 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如说一个父进程 fork 出子进程后,父进程挂起,如何实现?

    thanks.
    6 条回复    2016-05-18 11:44:45 +08:00
    hxndg
        1
    hxndg  
       2016-05-18 10:19:43 +08:00
    没明白啥意思,你是说父进程调用 wait 或者 waitpid 么?
    jimzhong
        2
    jimzhong  
       2016-05-18 10:42:58 +08:00
    如果需要等待子进程,可以在父进程 fork 后立即调用 wait4 或者 waitpid ,这样父进程就会被阻塞。直到子进程状态变化。
    hxndg
        3
    hxndg  
       2016-05-18 10:58:15 +08:00
    @jimzhong 实际情况里是调用 wait4 比较多么?我不太明白哈, wait3/4 不是只比 wait 多一个返回资源概述的参数么?
    wenyu1001
        4
    wenyu1001  
    OP
       2016-05-18 11:21:27 +08:00   ❤️ 1
    @hxndg

    wait3 等待任意子 pid ,等价 waitpid(-1, status, options);
    wait4 等待指定 pid ,等价 waitpid(pid, status, options);

    http://linux.die.net/man/2/wait4
    imcczy
        5
    imcczy  
       2016-05-18 11:21:43 +08:00 via iPhone
    OS 内部有专门的数据结构来保存进程的相关信息,如寄存器等,每一次切换都会有进程数据的保存和恢复。一个进程应该有 running , ready , block 三个状态,具体的切换由专门的调度系统控制。
    jimzhong
        6
    jimzhong  
       2016-05-18 11:44:45 +08:00   ❤️ 1
    @hxndg 最新的 manual 里面 wait3 和 wait4 已经 obsolete 了,推荐使用 waitid 和 waitpid
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3572 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:55 · PVG 18:55 · LAX 03:55 · JFK 06:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.