• 每天进步一点点——再次了解Linux进程ID


    转载请注明出处:http://blog.csdn.net/cywosp/article/details/38968011


    1. 概述
        众所周知,进程(process)是一个可运行程序的实例,可是在Linux中进程能够又一次改写为。进程是由内核定义的抽象的实体,并为该实体分配用以运行程序的各项系统资源。

    从内核的角度看。进程由用户内存空间(user-space memory)和一系列内核数据结构组成。当中用户内存空间包括了程序代码及代码所使用的变量,而内核数据结构则用于维护进程状态信息。

    记录在内核数据结构中的信息包括很多与进程相关的标识号(IDs)、虚拟内存表、打开文件的描写叙述符表、信号传递及处理的有关信息、进程资源使用及限制、当前工作文件夹及大量其它信息。


    2. 进程描写叙述符
        每个进程都有一个进程号(PID),进程号是一个正数,用以唯一标识系统中的某个进程。

    对各种系统调用而言,进程号有时能够作为传入參数,有时能够作为返回值。比方。系统调用kill(()同意调用者向拥有特定进程号的进程发送一个信号。当须要创建一个对某进程而言唯一标识符时。进程号就会派上用场。常见的样例是将进程号作为与进程相关文件名称的一部分(日志文件名称)。

    在分布式系统中能够使用ip:port:start_time:pid来区分整个集群中的进程。这样能够全然保证唯一性。也能够在出问题后能高速定位。

        系统调用getpid()返回调用进程的进程号,声明例如以下:
        #include<unistd.h>
        // Always successfully returns process ID of caller
        pid_t getpid(void);

    3. 进程描写叙述符的系统限定
        Linux内核限制进程号须要小于等于32767。新进程创建时,内核会按顺序将下一个可用的进程号分配给其使用。每当进程号到达32767的限制时,内核将重置进程号计数器,以便从小整数又一次開始分配。

    该分配方式详细例如以下:

        一旦进程号到达32767。内核会将进程号计数器重置为300。而不是1。之所以如此。是由于低数值的进程号为系统进程和守护进程长期占用,在此范围内搜索尚未使用的进程号仅仅会是浪费时间。
        在Linux 2.4版本号及更早版本号中,进程号的上限是32767,由内核常量PID_MAX所定义。在Linux 2.6版本号中。情况有所改变。虽然进程号的默认上限仍是32767。可是能够通过Linux系统特有的/proc/sys/kernel/pid_max文件来进行调整(其值=最大进程+1)。在32位平台中,pid_max文件的最大值为32767,可是在64位平台中。该文件的最大值能够高达2^22次方(约400万),系统可容纳的进程数量会很庞大。

    4. 父进程号
        每一个进程都有一个创建自己的父进程。

    使用系统调用getppid()能够获取父进程的进程号。该函数声明例如以下:

        #include<unistd.h>
        // Always successfully returns ID of parent of caller
        pid_t getppid(void)
        实际上,每一个进程的父进程号属性反映了系统上全部进程间的树状关系。每一个父进程的父进程又有自己的父进程,以此类推。回溯到1号进程——init进程。即全部进程的始祖。

    使用pstree命令能够查看这一树状关系。

        假设子进程的父进程终止了,则子进程会变成“孤儿”,init进程随即将收养该进程,子进程兴许对getppid()的调用将返回进程号1。通过查看由Linux系统所特有的/proc/PID/status文件所提供的PPid字段,能够获知每一个进程的父进程。






  • 相关阅读:
    吸取前人教训,每个程序员都曾犯过的经典错误,你可千万要避免
    程序员帮助妹妹攻破C语言,整理超详细规划,快来看!
    2020年总结:程序员爱用开发工具 Top 100
    程序员为了拿到N+1辞退金,使计让公司辞退自己,网友评论画风突变!
    回顾2020的爷青结:有哪些记忆里的应用正在消逝!
    菜鸟看过来!新的一年,这几点雷区别再踩了
    年龄从不是学习的界限,84岁高龄奶奶自学编程,受苹果公司CEO邀请参加全球开发者大会!
    TIOBE 2月编程语言排行榜出炉:C语言冠军宝座稳定,前十名有什么变化?
    用TensorRT和Numpy编写的Yolov5推理。在【Nvidia Jetson】设备上运行,无需依赖任何pytorch / torchvision
    Example app/api for exposing yolov5 model via flask
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4607128.html
Copyright © 2020-2023  润新知