• 僵尸进程处理

    •   僵尸进程和孤儿进程

      •   基本概念:我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。(大体就是父进程必须去得到子进程的结束信息,如果没有得到的就是僵尸,死了还在系统中,父进程不知道。)
      •   孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
      •   僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
      •   孤儿进程和僵尸进程的危害:
        •   孤儿:孤儿进程是没有父进程的进程,孤儿进程这个重任就落到了init进程身上,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。每当出现一个孤儿进程的时候,内核就把孤 儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会代表党和政府出面处理它的一切善后工作。因此孤儿进程并不会有什么危害。
        •   僵尸:如果大量产生僵尸进程(僵尸进程的进程号以及一些其他的东西会保留下来),那么就会使得系统中的进程号被太多的占去,就没有办法产生新的进程了,所以僵尸应当避免。
        • 更详细的内容请参考:http://www.cnblogs.com/Anker/p/3271773.html
    •   处理方法
      •   ①:通过忽略SIGCHLD信号,避免僵尸进程

        在server端代码中添加
        signal(SIGCHLD, SIG_IGN);
        SIG_IGN:这个是忽略信号
        
        SIGCHLD,在一个进程终止或者停止时,将SIGCHLD信号发送给其父进程,按系统默认将忽略此信号,如果父进程希望被告知其子系统的这种状态,则应捕捉此信号。
        signal()函数理解,在<signal.h> 这个头文件中。

        signal(参数1,参数2);

        参数1:我们要进行处理的信号。

        参数2:我们处理的方式(是系统默认还是忽略还是捕获)。SIG_IGN,SIG_DFL,

         
      •   ②:通过wait/waitpid方法,解决僵尸进
        signal(SIGCHLD,onSignalCatch);
        
        onSignalCatch:如果父进程希望被告知其子系统的这种状态,则应捕捉此信号,这个是捕捉信号
        void onSignalCatch(int signalNumber) {  wait(NULL); }
  • TCP协议的11中状态
    •   
    •   详细信息参考:http://www.cnblogs.com/Kobe10/p/5770585.html

  • close和shutdown 的区别
    •   当所有的数据操作结束以后,你可以调用close()函数来释放该socket,从而停止在该socket上的任何数据操作:
      close(sockfd);
    •   你也可以调用shutdown()函数来关闭该socket。该函数允许你只停止在某个方向上的数据传输,而一个方向上的数据传输继续进行。如你可以关 闭某socket的写操作而允许继续在该socket上接受数据,直至读入所有数据。
      • 使用close中止一 个连接,但它只是减少描述符的参考数,并不直接关闭连接,只有当描述符的参考数为0时才关闭连接。
        shutdown可直接关闭描述符,不考虑描述 符的参考数,可选择中止一个方向的连接。
  • 完整的地址:http://blog.csdn.net/zjf280441589/article/details/44259777

最新文章

  1. Ubuntu14.04台式机r8169有线网卡驱动问题
  2. Mysql 中 iddata1的缩小步骤
  3. Exceptionin thread &quot;main&quot; java.lang.UnsatisfiedLinkError:org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(II[BI[BIILjava
  4. Swift2.1 语法指南——高级操作符
  5. Spring基本概念
  6. Android自定义进度条颜色
  7. Maven —— 如何设置HTTP代理
  8. JavaScript装逼指南
  9. hdu - 3572 - Task
  10. IBM即将倒闭,微软也从崩溃18个月
  11. 使用 JUnit 报错 java.lang.Exception: No runnable methods
  12. 关于error C2872: &#39;LONG_PTR&#39; : ambiguous symbol
  13. Yii2 在模块modules间跳转时,url自动加模块名
  14. 201521123064 《Java程序设计》第7周学习总结
  15. Java操作Memcached
  16. mysql之delete语法
  17. Android Studio 日志工具
  18. Python 进程之间共享数据
  19. 原 layer父子页面交互
  20. Usbhub驱动编译

热门文章

  1. MySQL安装后默认自带数据库的作用
  2. HihoCoder1403 后缀数组一&#183;重复旋律1
  3. eShopOnWeb
  4. vue切换样式
  5. BZOJ2120:数颜色(莫队版)
  6. HDU1387:Team Queue
  7. canvas绘制中的API
  8. 使用script转储终端命令输出,或者录制并播放session的内容
  9. XXXAction-validation.xml文件中报错:Referenced file Contains errors
  10. 批量删除osd的shell脚本