您的位置:首页 > 运维架构 > Linux

Linux系统进程控制编程(一)————基本概念和函数getpid的使用

2013-10-25 13:38 1226 查看
Linux系统进程控制编程(一)————基本概念和函数getpid的使用
1、什么是进程

  

   当运行任何一个UNIX命令时,shell至少会建立一个进程来运行这个命令,所以可以把任何在UNIX系统中运行的程序叫做进程;但是进程并不是程序,进程是动态的,而程序是静态的,并且多个进程可以并发的调用同一个程序。

  

  系统中每一个进程都包含一个task_struct数据结构,所有指向这些数据结构的指针组成一个进程向量数组,系统缺省的进程向量数据大小是512,表示系统中可同时容纳512个进程。进程的task_struct数据结构包括了进程的状态、调度信息、进程标识符等信息。

  

  由于UNIX系统是一个多进程的操作系统,所以每一个进程都是独立的,都有自己的权限及任务,所以当某一进程失败时并不会导致别的进程失败。系统通过进程标识符来区分不同的进程,进程标识符是一个非负正数,他在任何时刻都是唯一的,当某个进程结束时,他的进程标识符可以分配给另外一个新进程。系统将标识符 0分配给调度进程,标识符1分配给初始化进程。

  

   进程在运行期间,会用到很多资源,包括最宝贵的CPU资源,当某一个进程占用CPU资源时,别的进程必须等待正在运行的进程空闲CPU后才能运行,由于存在很多进程在等待,所以内核通过调度算法来决定将CPU分配给哪个进程。

  

   系统在刚刚启动时,运行于内核方式,这时候只有一个初始化进程在运行,他首先做系统的初始化,然后执行初始化程序(一般是/sbin/init)。初始化进程是系统的第一个进程,以后所有的进程都是初始化进程的子进程。

2. 进程标识符管理

  

  UNIX系统使用进程标识符来管理当前系统中的进程。为对具有某类似特性的进程统一管理,系统又引入了进程组的概念,以组标识符来区别进程是否同组。进程的组标识符是从父进程继承下来的,所以,通常进程的组标识符就是和它相关联的注册进程的标识符。进程的标识符是由系统为之分配的,不能被修改;组标识符可通过setpgrp系统调用修改。

  

  相关系统调用的格式如下:

  

  #include <sys/types.h>

  #include <unistd.h>

  pid_t getpid(void);

  pid_t getpgrp(void);

  pid_t getppid(void);

  pid_t getpgid(pid_t pid);

  

  说明:前三个系统调用分别返回调用进程的进程标识符、进程组标识符和其父进程标识符。它们总能成功地返回。第四个调用置进程组标识符,它将调用进程的进程组标识符改为调用进程的进程标识符,使其成为进程组首进程,并返回这一新的进程组标识符。

  

下面我们来看一个实例:

#include<stdio.h>

#include<unistd.h>

#include<stdlib.h>

int main(void)

{

    printf("PID = %d\n", getpid());

    printf("PPID = %d\n", getppid());

    return 0;

}

[root@localhost src]# gcc getpid.c 

[root@localhost src]# ./a.out 

PID = 4408

PPID = 3128
[root@localhost src]# 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  getpid函数
相关文章推荐