• 触控(捕鱼达人)笔试


    2013年4月16号触控实习生笔试

    1.函数参数传递有几种方式
    2.STL中dequeue,vector,list的区别
    3.const char *pChar;
    char const *pChar;
    char *const pChar;
    const char *const pChar;
    的区别
    4.do..while和while..do的区别
    5.printf("%d",10*('F'-'A'));的运行结果

    6.写一个常用的程序片段,用C语言和C++分别怎么处理
    7.写一个只能产生一个实例的C++类
    8.给出一段代码,改错
    9.父类中的虚函数,子类中不加virtual可以实现多态吗?
    10.进程间实现通信的几种方式
    11.僵尸进程是什么,如何避免僵尸进程
    12.给出一个单链表中的一个结点p,实现:
    A)删除结点
    B)在结点前面插入一个结点

    僵尸进程:

    在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。通过ps命令查看其带有defunct的标志。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。

    但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init进程来接管他,成为他的父进程,从而保证每个进程都会有一个父进程。而Init进程会自动wait其子进程,因此被Init接管的所有进程都不会变成僵尸进程。

    解决方法:
     
      (1) 父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。
     
      执行wait()或waitpid()系统调用,则子进程在终止后会立即把它在进程表中的数据返回给父进程,此时系统会立即删除该进入点。在这种情形下就不会产生defunct进程。
     
      (2) 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler。在子进程结束后,父进程会收到该信号,可以在handler中调用wait回收。
     
      (3) 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCLD, SIG_IGN)或signal(SIGCHLD, SIG_IGN)通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收,并不再给父进程发送信号
     
      (4)fork两次,父进程fork一个子进程,然后继续工作,子进程fork一个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收还要自己做。
     
     
  • 相关阅读:
    使用Eclipse搭建Struts2框架
    老王学jsp之response
    老王学jsp之request对象
    老王学jsp之四种属性范围
    老王学jsp之包含指令
    老王学jsp之page指令
    老王学jsp之jdom解析
    老王学jsp之sax解析xml
    老王学jsp之dom解析xml
    python文本分类
  • 原文地址:https://www.cnblogs.com/sanshuiyijing/p/3025367.html
Copyright © 2020-2023  润新知