![]() | 1 echo1937 2015-08-08 20:18:43 +08:00 你试试fork炸弹就知道了。 |
![]() | 2 Strikeactor 2015-08-08 20:19:06 +08:00 while false什么鬼 |
![]() | 3 wy315700 2015-08-08 20:24:44 +08:00 while(false) 你跑10年都不会有效果 |
![]() | 4 rrfeng 2015-08-08 20:25:04 +08:00 你敢贴上这个么 :(){:|:&};: |
5 jasontse 2015-08-08 20:35:14 +08:00 via Android 会把 PID 号码吃完 |
![]() | 6 supman OP |
![]() | 7 ihciah 2015-08-08 20:51:22 +08:00 上次出去玩,逛到一家苹果专卖店,扔了一个炸弹也是没应,差评 |
9 xierch 2015-08-08 21:11:26 +08:00 最坑的是 fork() 失败后还要 kill() xl2tpd 里就有这个 bug,kill(-1, TERM),呵呵呵,不知道修好了没有 |
![]() | 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. |
11 sleeperqp 2015-08-09 00:23:45 +08:00 fork会占完linux的进程管理资源 而不是整个内存的资源 (进程管理资源在内存中) 因为linux管理进程是用一个结构体(task_struct)数组来管理进程的 这个数组是固定的 也就说系统所管理的进程数一定 因此不断fork是会耗尽这个结构体的 pid是一个unsiged int数 是循环使用的 因此首先耗尽的应该是结构体数组 而不是pid 上面说的copy on write是对的 当你不对新fork的进程进行写操作时 这些进程所管理的内存页实际是一样的 新增的进程只需要让内存页的计数加一 然后管理的页表项指向内存也即可 因此内存消耗较小 |
![]() | 12 tracyone 2015-08-09 00:25:30 +08:00 via Android 似乎有限制一个程序里面进程数的… |
![]() | 13 q5we66fg 2015-08-09 11:16:04 +08:00 每个进程好像又现在最大内存,不知道会不会swap |
![]() | 14 binyuJ 2015-08-09 15:31:22 +08:00 我在.bashrc 里加了个diff() { diff -u "$@" } 结果只要一打diff直接就不响应了,只能按电源 看kenerl log 里面就是出了无限循环内存耗尽 |