Linux——进程

目录

一、基本概念

二、描述进程-PCB

(一)task_struct-PCB的一种

(二)task_ struct内容分类

三、查看进程

(一)利用ps命令 

(二) 通过 /proc 系统文件夹查看

(三)proc是动态目录结构,存放所有存在的进程,目录的名称,就是以这个进程的id命名

四、通过系统调用获取进程标示符(getpid和getppid)

(一)下载getpid手册

(二)使用getpid

(三)使用getppid

五、通过系统调用创建进程-fork

(一)认识fork

(二)fork有两个返回值

(三)用 if 进行分流


一、基本概念

  • 课本概念:程序的一个执行实例,正在执行的程序等
  • 内核观点:担当分配系统资源(CPU时间,内存)的实体
  • 进程 = 可执行程序 + 内核数据结构(PCB)

二、描述进程-PCB

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合
  • 课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

(一)task_struct-PCB的一种

  • Linux中描述进程的结构体叫做task_struct
  • task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息

(二)task_ struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息

三、查看进程

(一)利用ps命令 

ps ajx//列出所有用户的所有进程的详细信息

Linux——进程_第1张图片

ps ajx | head -1 && ps ajx | grep mybin
//ps ajx | head -1 获取当前运行的所有进程的列标题
//ps ajx | grep mybin 在所有进程中寻找包含关键词 "mybin" 的进程

Linux——进程_第2张图片

(二) 通过 /proc 系统文件夹查看

ls /proc/  ---用于列出系统中所有正在运行的进程的相关信息

Linux——进程_第3张图片

(三)proc是动态目录结构,存放所有存在的进程,目录的名称,就是以这个进程的id命名

ls /proc/7976 -dl//显示进程ID为7976的进程的目录信息,而不显示目录中的内容

Linux——进程_第4张图片

Linux——进程_第5张图片

Linux——进程_第6张图片

四、通过系统调用获取进程标示符(getpid和getppid)

  • 进程id(PID)
  • 父进程id(PPID)

(一)下载getpid手册

sudo yum install -y man-pages

Linux——进程_第7张图片

(二)使用getpid

#include
#include
#include
int main()
{
    int i = 0;
    while (i <= 100)
    {
         pid_t id = getpid();
         printf("My process id is:%d\n", id);
         sleep(1);
    }
     return 0;
}

Linux——进程_第8张图片

 使用kill

kill -9 32212//强制终止PID为32212的进程(-9表示强制)

Linux——进程_第9张图片

(三)使用getppid

#include
#include
#include
int main()
{
    int i=0;
    while(i<=100)
    {      
        printf("I am a process, myid: %d, parent id: %d\n",getpid(),getppid());                     
        sleep(1);                                    
     }                                    
    return 0;      
} 

Linux——进程_第10张图片

五、通过系统调用创建进程-fork

(一)认识fork

while :;do ps ajx | head -1 && ps ajx | grep mybin;sleep 1;echo "#————————————————————————————————————————————————————#";done

Linux——进程_第11张图片

Linux——进程_第12张图片

  • 在fork函数被调用之前的代码被父进程执行
  • 父子进程代码共享(fork之后,父子进程回执行一样的代码),但是数据各自开辟空间,私有一份(采用写时拷贝)
  • 以父进程为模板,为子进程创建PCB

(二)fork有两个返回值

  • fork成功的时候,会有两个不同的返回值,给子进程返回0,给父进程返回子进程的pid
  • fork失败的时候,则在父进程中返回 -1

Linux——进程_第13张图片

Linux——进程_第14张图片

(三)用 if 进行分流

 Linux——进程_第15张图片

 Linux——进程_第16张图片

你可能感兴趣的:(Linux,linux,运维,服务器)