进程以及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 = %d\n", pid);  

    // 获取当前进程的PPID  
    pid_t ppid = getppid();  
    printf("ppid = %d\n", 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查询)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值