Linux进程 小结

Linux进程 小结

一.进程概述

结合程序了解进程

  1. 程序: 程序是存放在存储介质上的一个可执行文件。
  2. 进程:进程是程序的执行实例,包括程序计数器、寄
    存器和变量的当前值。
  3. 程序与进程的区别:
    程序是静态的,进程是动态的
    程序是一些指令的有序集合,而进程是程序执行的过程。进程的状态是变化的,其包括进程的创建、调度和消亡。

ps:分析
从用户角度:进程就是一个正在运行中的程序。
操作系统角度:操作系统运行一个程序,需要描述这个程序的运行过程,这个描述通过一个结构体task_struct{ }来描述,统称为PCB,因此对操作系统来说进程就是PCB(process control block)程序控制块

二.进程号概述

1.什么是进程号?

  1. 每个进程在初始化的时候,系统都分配了一个ID号,用于标识此进程。
  2. 在Linux中进程号是唯一的,系统可以用这个值来表示一个进程,描述进程的ID号通常叫做PID,即进程ID(process id)。PID的变量类型为pid_t
  3. 进程号总是唯一的,但进程号可以重用。当一个进程
    终止后,其进程号就可以再次使用了。
  • 进程号(PID)
    标识进程的一个非负整型数。
  • 父进程号(PPID)
    任何进程(除init进程)都是由另一个进程创建,
    该进程称为被创建进程的父进程,对应的进程号称为
    父进程号(PPID)。
  • 进程组号(PGID)
    进程组是一个或多个进程的集合。他们之间相互
    关联,进程组可以接收同一终端的各种信号,关联的
    进程有一个进程组号(PGID) 。

2.如何获取进程号

Linux操作系统提供了三个获得进程号的函数getpid()、
getppid()、getpgid()。

需要包含头文件:
#include <sys/types.h>
#include <unistd.h>

使用方法:

  • pid_t getpid(void)
    返回值:本进程号(PID)
  • pid_t getppid(void)
    返回值:调用此函数的进程的父进程号(PPID)
  • pid_t getpgid(pid_t pid)
    参数:0当前PGID,否则为指定进程的PGID
    返回值:进程组号(PGID)

使用实例

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char const *argv[])
{
    printf("进程号:%d\n", getpid());
    printf("父进程号:%d\n", getppid());
    printf("进程组号:%d\n", getpgid(0));
    return 0;
}
进程号:2773
父进程号:2115
进程组号:2773

三.创建进程fork函数

fork函数:创建一个新的进程

pid_t fork(viod)    

功能:
fork()函数用于从一个已存在的进程中创建一个新进程,
新进程称为子进程,原进程称为父进程。

返回值:
成功:子进程中返回0,父进程中返回子进程ID。
失败:返回-1。

子进程使用fork函数得到的子进程是父进程的一个复制品,
它从父进程处继承了整个进程的地址空间。
地址空间:
包括进程上下文、进程堆栈、打开的文件描述符、
信号控制设定、进程优先级、进程组号等。
进程所独有的只有它的进程号,计时器等。可有时我们只需要复制父进程中的几个地址内容,并不需要全部复制一遍,因此,使用fork函数的代价是很大的。

使用实例:

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

int main(int argc, char const *argv[])
{
    pid_t pid =  fork();//创建进程
    if(pid == 0)//子进程
    {
        printf("子进程号:%d\n", getpid());

    }
    else if(pid > 0)//父进程
    {
        printf("父进程号:%d\n", getppid());
    }
    return 0;
}
父进程号:2115
子进程号:2995

四.资源回收 wait函数

pid wait(int *status)

功能: 等待子进程改变状态,如果子进程终止了,此函
数会回收子进程的资源。
参数: status中为子程序退出时的状态信息
返回值:
成功:子进程进程号
失败:-1

好累啊 休息

五.结束进程

在linux下可以通过以下方式结束正在运行的进程:

void exit(int value);
void _exit(int value);
  • exit函数:结束进程执行
void exit(int value)

参数:返回给父进程的参数(低8位有效)。

  • _exit函数:结束进程执行
void _exit(int value)

参数: 返回给父进程的参数(低8位有效)。

exit为库函数_exit为系统调用函数,一般使用库函数提高运行效率

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值