我是靠谱客的博主 眯眯眼猎豹,最近开发中收集的这篇文章主要介绍进程以及task_struct结构体,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

进程

1、进程的概念

首先在linux操作系统下,当你触发任何一个事件时,系统都将它定义为一个进程,并且给予这个进程一个ID,即PID。
那么如何产生一个进程呢?简单来说就是“执行一个程序或命令”。

2、进程与程序的区别

程序一般是以物理文件的形式储存在硬盘等存储媒介中。
进程可以看做在内存中正在运行的程序。

3、子进程与父进程

一个进程创建的另一个新进程称为子进程。相反地,创建子进程的进程称为父进程。
对于一个普通的用户进程,它的父进程就是执行它的哪个Shell,对于Linux而言,Shell就是bash。
查询PID和PPID的函数:
PID:pid_t getpid(void);
PPID:pid_t getppid(void);

#include <stdio.h>  
#include <sys/types.h>  
#include <unistd.h>  

int main()  
{  
    // 获取当前进程的PID  
    pid_t pid = getpid();  
    printf("pid = %dn", pid);  

    // 获取当前进程的PPID  
    pid_t ppid = getppid();  
    printf("ppid = %dn", ppid);  

    return 0;  
}  

一般采用ps -l的命令来显示进程的PID和PPID。

4、fork和exec(过程调用的流程)

进程相互之间存在着调用,在Linux的过程调用通常称为fork-and-exec流程,首先进程都会通过父进程以复制(fork)的形式产生一个一模一样的子进程,然后复制出来的子进程通过exec的方式来执行实际要进行的进程。
注:这个子进程与父进程唯一的区别就是PID,并且这个子进程多了一个PPID参数。

我们来看下面一段代码:

#include<stdio.h>

int main()
{
    printf("I am process!");
    return 0;
}

这个程序的结果显而易见,那么我们给代码中加上一句。

#include<stdio.h>

int main()
{
    fork();
    printf("I am process!");
    return 0;
}

结果如下图
这里写图片描述

下面是fork返回值的内容(通过man fork查询)

最后

以上就是眯眯眼猎豹为你收集整理的进程以及task_struct结构体的全部内容,希望文章能够帮你解决进程以及task_struct结构体所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部