fork()可以把 linux 系统资源占完么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
supman
V2EX    问与答

fork()可以把 linux 系统资源占完么?

  •  
  •   supman 015-08-08 20:11:43 +08:00 2975 次点击
    这是一个创建于 3720 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大概在自己服务器上循环了10分钟, 但是没什么反应啊。。
    while(2==0)
    {
    fork();
    }
    14 条回复    2015-08-09 15:31:22 +08:00
    echo1937
        1
    echo1937  
       2015-08-08 20:18:43 +08:00
    你试试fork炸弹就知道了。
    Strikeactor
        2
    Strikeactor  
       2015-08-08 20:19:06 +08:00
    while false什么鬼
    wy315700
        3
    wy315700  
       2015-08-08 20:24:44 +08:00
    while(false) 你跑10年都不会有效果
    rrfeng
        4
    rrfeng  
       2015-08-08 20:25:04 +08:00
    你敢贴上这个么
    :(){:|:&};:
    jasontse
        5
    jasontse  
       2015-08-08 20:35:14 +08:00 via Android
    会把 PID 号码吃完
    supman
        6
    supman  
    OP
       2015-08-08 20:38:08 +08:00
    @echo1937
    @Strikeactor
    @wy315700
    @rrfeng
    @jasontse


    错了错了。。。是while true。。。。 但是服务器还是好好的。。
    ihciah
        7
    ihciah  
       2015-08-08 20:51:22 +08:00
    上次出去玩,逛到一家苹果专卖店,扔了一个炸弹也是没应,差评
    echo1937
        8
    echo1937  
       2015-08-08 20:58:43 +08:00
    @supman 把你的脚本写成递归调用再说。
    xierch
        9
    xierch  
       2015-08-08 21:11:26 +08:00
    最坑的是 fork() 失败后还要 kill()
    xl2tpd 里就有这个 bug,kill(-1, TERM),呵呵呵,不知道修好了没有
    mind3x
        10
    mind3x  
       2015-08-09 00:14:51 +08:00
    fork()是copy on write的好吗...你单纯跑fork,能占的资源很有限。

    Under Linux, fork() is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique task structure for the child.
    sleeperqp
        11
    sleeperqp  
       2015-08-09 00:23:45 +08:00
    fork会占完linux的进程管理资源 而不是整个内存的资源 (进程管理资源在内存中)
    因为linux管理进程是用一个结构体(task_struct)数组来管理进程的 这个数组是固定的 也就说系统所管理的进程数一定 因此不断fork是会耗尽这个结构体的
    pid是一个unsiged int数 是循环使用的 因此首先耗尽的应该是结构体数组 而不是pid
    上面说的copy on write是对的 当你不对新fork的进程进行写操作时 这些进程所管理的内存页实际是一样的 新增的进程只需要让内存页的计数加一 然后管理的页表项指向内存也即可 因此内存消耗较小
    tracyone
        12
    tracyone  
       2015-08-09 00:25:30 +08:00 via Android
    似乎有限制一个程序里面进程数的…
    q5we66fg
        13
    q5we66fg  
       2015-08-09 11:16:04 +08:00
    每个进程好像又现在最大内存,不知道会不会swap
    binyuJ
        14
    binyuJ  
       2015-08-09 15:31:22 +08:00
    我在.bashrc 里加了个diff() { diff -u "$@" }
    结果只要一打diff直接就不响应了,只能按电源
    看kenerl log 里面就是出了无限循环内存耗尽
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3088 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 11:57 PVG 19:57 LAX 04:57 JFK 07:57
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86