深入理解Unix进程--读后总结

  1. 进程皆有标识pid,可以通过getpid() 系统调用来获得进程的pid
  1. 进程皆有父进程,天字第一号进程除外。每个进程天生就知道他自己的父进程,可以通过getppid()系统调用来获得进程的ppid
  1. 进程皆有文件描述符fd,Unix中一切皆文件,包括普通文件,管道,套接字等资源,文件描述符是资源的id。文件描述符是进程独占的,除了fork进程之外,不与其他进程共享
  1. 每个进程默认有三个文件描述符stdin,stdout,stderr
  1. 系统能够同时打开的文件描述符有最大的限制,限制分为进程自身的限制(软限制)和内核限制(硬限制)。任何进程都可以修改自身的软限制,但是只有root用户可以修改内核的硬限制。当超出限制的时候,会抛出Errno:EMFILE异常。
  1. 可以通过系统调用setrlimit()getrlimit()来设置和获取系统的限制
  1. 进程皆有环境变量,用键值对表示,使用key=value可以给进程设置环境变量。通过env命令可以查看该进程设置的环境变量。子进程的环境变量是从父进程继承的。可以通过getenv,setenv库函数来获取和设置环境变量
  1. 进程皆有参数,叫做ARGV,这是一个数组,所有进程都可以访问该数组,来获得外部传递给自己的启动参数。
  1. 进程皆有进程名,并且进程名可以在进程运行的过程中被动态的修改。
  1. 进程皆有退出码,0-255用于表示进程的退出状态。所谓雁过留痕,这是进程最后为系统提供进程信息的机会了。有多种方法可以退出,exit(n)来强行退出,abort string退出进程,并打印一个字符串到stderr。 raise string产生一个异常然后退出。以上的几种退出方法,都会让进程做一些清理工作,有一个终极退出方法是exit! (n)来强行退出进程,不调用任何的清理方法
  1. 进程皆可衍生。也就是fork.fork出来的进程用于父进程的所有资源,包括文件描述符,所以fork出的子进程拥有父进程一样的套接字,这个很重要,一般fork出来进程都要先关闭子进程的套接字。
  1. fork在父进程中返回子进程的pid,在子进程中返回0
  1. 如果父进程在子进程之前结束之前先结束了,子进程就变成孤儿进程了。除非该孤儿进程是特意而为之的,比如守护进程,否则的话,孤儿进程就会变成僵尸进程
  1. 进程皆可待。这是和进程皆可衍生对应的。任何一个进程都可以调用一些方法(比如Process.wait)来使自己等待某个子进程退出之后继续往下执行。
  1. Process.wait等待父进程的任意一个子进程退出,并且返回该子进程的pid。他还有几个变体Process.wait2,他也是等待任意一个子进程退出,但是会返回两个参数,一个是退出子进程的pid,一个是子进程退出时候的状态码
  1. Process.wait还有两个变体是Process.waitpid和Process.waitpid2,这两个变体可以接受一个pid号,等待特定的子线程退出。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,172评论 0 23
  • Linux 进程管理与程序开发 进程是Linux事务管理的基本单元,所有的进程均拥有自己独立的处理环境和系统资源,...
    JamesPeng阅读 2,509评论 1 14
  • 计算机系统漫游 代码从文本到可执行文件的过程(c语言示例):预处理阶段,处理 #inlcude , #defin...
    willdimagine阅读 3,626评论 0 5
  • 首先抛出结论:管理是个动态的过程 理解团队的定位 新晋管理者往往知道自己的定位,但经常缺乏思考团队的定位。为了高效...
    斑驳的纹章阅读 233评论 0 0
  • 我们在花园相遇,彼此犹如亲人,约定了一个时间见面;我们如约而至,但花园重修了;但在某一天,我到了你的家乡,在路...
    有梦想的小孩阅读 303评论 0 1