转载请注明出处: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字段,能够获知每一个进程的父进程。




每天进步一点点——再次了解Linux进程ID的更多相关文章

  1. Linux进程ID号--Linux进程的管理与调度(三)【转】

    Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一. 该数据结 ...

  2. Linux进程ID号--Linux进程的管理与调度(三)

    转自:http://blog.csdn.net/gatieme/article/category/6225543 日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux- ...

  3. Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四)

    Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别 ...

  4. Linux进程管理与调度-之-目录导航【转】

    转自:http://blog.csdn.net/gatieme/article/details/51456569 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:// ...

  5. Linux 内核进程管理之进程ID

    Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一.该数据结构 ...

  6. linux 进程管理相关内容

    简介 当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰.这个特殊的环境就称为进程. 每个 Linux 命令都与系统中 ...

  7. Linux进程切换代码分析

    朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这次我们来分析L ...

  8. linux进程及进程控制

    Linux进程控制   程序是一组可执行的静态指令集,而进程(process)是一个执行中的程序实例.利用分时技术,在Linux操作系统上同时可以运行多个进程.分时技术的基本原理是把CPU的运行时间划 ...

  9. Linux 进程

    Linux 进程 在用户空间,进程是由进程标识符(PID)表示的.从用户的角度来看,一个 PID 是一个数字值,可惟一标识一个进程.一个 PID 在进程的整个生命期间不会更改,但 PID 可以在进程销 ...

随机推荐

  1. hdu4521 小明系列的问题——小明序列(LIS变种 (段树+单点更新解决方案))

    链接: huangjing 题目:中文题目 思路: 1:这个题目假设去掉那个距离大于d的条件,那么必定是一个普通的LIS.可是加上那个条件后就变得复杂了.我用的线段树的解法. . .就是採用延迟更新的 ...

  2. VSTO学习笔记(十五)Office 2013 初体验

    原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 201 ...

  3. poj 1011 Sticks ,剪枝神题

    木棒 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 118943 Accepted: 27429 Description 乔治拿 ...

  4. POJ 3458 Colour Sequence(简单题)

    [题意简述]:事实上题意我也没有特别看懂.可是依据它少许的题目描写叙述加上给的例子.就大胆的做了例如以下的推測: 就是说,如今给出一串字符s.然后紧接着给出可见的字符串visible还有隐藏的字符串h ...

  5. Codeforces Round #254 (Div. 1)-A,B

    A:选取两点一边就能够了,非常明显能够想出来... 可是一開始看错题了,sad.... #include<stdio.h> #include<string.h> #includ ...

  6. Linux内核——进程管理与调度

    进程的管理与调度 进程管理 进程描写叙述符及任务结构 进程存放在叫做任务队列(tasklist)的双向循环链表中.链表中的每一项包括一个详细进程的全部信息,类型为task_struct,称为进程描写叙 ...

  7. NYOJ 104 最大子矩阵(二维DP)

    最大和 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描写叙述 给定一个由整数组成二维矩阵(r*c),如今须要找出它的一个子矩阵,使得这个子矩阵内的全部元素之和最大,并把这个 ...

  8. OpenStack安装与配置2

    第二部分 OpenStack安装与配置 一.引言   本章内容讲解如何在3台物理机上搭建最小化云平台,这3台机器分为称为Server1.Server2和Client1,之后的各章也是如此.Server ...

  9. poj 3280 Cheapest Palindrome ---(DP 回文串)

    题目链接:http://poj.org/problem?id=3280 思路: dp[i][j] :=第i个字符到第j个字符之间形成回文串的最小费用. dp[i][j]=min(dp[i+1][j]+ ...

  10. HDU 1241 :Oil Deposits

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...