C++进程的创建和进程ID标识详细介绍

 更新时间:2022年08月26日 16:58:04   作者:小小酥诶  
传统的C++(C++98)中并没有引入线程这个概念。linux和unix操作系统的设计采用的是多进程,进程间的通信十分方便,同时进程之间互相有着独立的空间,不会污染其他进程的数据,天然的隔离性给程序的稳定性带来了很大的保障

进程的ID

进程的ID,可称为PID。它是进程的唯一标识,类似于我们的身份证号是唯一标识,因为名字可能会和其他人相同,生日可能会与其他人相同……大多数的事件都可能会与其他人相同,而身份证号每个人都是不一样的,这是社会中自己的唯一标识。

当进程被创建的时候,系统就自动分配给进程一个唯一的PID,PID是正数。

在Linux中有两个系统调用函数,可以获取进程的ID。

  pid_t getpid(void); //获取进程ID(PID)
  pid_t getppid(void);//获取其父进程ID(PPID)

所需头文件

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

getpid()返回的时调用该函数的进程的PID,getppid()返回的是调用该函数的进程的父进程ID(PPID),返回值类型是pid_t,实际上是无符号整型,这两个函数不会出现调用失败的情况

开始测试……

  //mycode.c文件
# include <stdio.h>
# include <sys/types.h>
# include <unistd.h>
int main(void)
{
  //创建子进程
  pid_t id = fork();
  if(id == 0)
  {
 //子进程
  printf("i am child, my id is %d\n",getpid());
  }
  else{                                                                                                                                                         
  //父进程
  printf("i am parent, my id is %d\n",getppid());
  }
  return 0;
}

//运行结果
i am parent, my id is 1593
i am child, my id is 7048

进程创建

【进程创建的主要事件】

1、新的批处理作业

2、由进程派生出一个进程

3、因为提供服务而创建

4、交互登录

操作系统创建进程包含的步骤

1、分配唯一的进程标识符

2、分配空间

3、初始化进程控制块(PCB)

4、修改连接

5、创建/扩充其他数据结构

对于“修改连接”,操作系统会把调度队列保存成某些数据结构,新的进程需要放置在数据结构里,所以需要重新连接。

在Linux系统中,可以创建新进程的系统调用函数只有一个fork

#include <unistd.h>
 pid_t fork(void);

描述:

fork()函数可以创建子进程,所需的头文件为unistd.h, 返回两次。

  • 如果返回的是0,则表示为子进程
  • 如果返回的是非0,则表示为父进程

到此这篇关于C++进程的创建和进程ID标识详细介绍的文章就介绍到这了,更多相关C++进程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++中命名空间的概念及使用详解

    C++中命名空间的概念及使用详解

    这篇文章主要介绍了C++中命名空间的概念及使用详解,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字就是针对这种问题而出现的,需要的朋友可以参考下
    2023-08-08
  • Qt实现定时器的两种方法分享

    Qt实现定时器的两种方法分享

    这篇文章主要为大家详细介绍了Qt中实现定时器的两种不同方法,文中的示例代码讲解详细,对我们了解Qt有一定的帮助,感兴趣的可以跟随小编一起学习一下
    2022-11-11
  • C语言中求余运算符的使用解读

    C语言中求余运算符的使用解读

    这篇文章主要介绍了C语言中求余运算符的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 利用C语言解决八皇后问题以及解析

    利用C语言解决八皇后问题以及解析

    这篇文章主要给大家介绍了关于利用C语言解决八皇后问题以及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Matlab实现读写txt文件数据与进制转换

    Matlab实现读写txt文件数据与进制转换

    这篇文章主要为大家详细介绍了Matlab实现读写txt文件数据与进制转换的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C++中实现子进程执行和管道通信详解

    C++中实现子进程执行和管道通信详解

    在这篇博客中,我们将深入探索如何在 C++ 程序中实现子进程的创建与执行,以及父子进程间的管道通信,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • cmake跨平台构建工具的学习笔记

    cmake跨平台构建工具的学习笔记

    CMake是一个跨平台的安装/编译工具,通过CMake我们可以通过简单的语句来描述所有平台的安装/编译过程,下面这篇文章主要给大家介绍了关于cmake跨平台构建工具的相关资料,需要的朋友可以参考下
    2023-02-02
  • C++简单实现shared_ptr的代码

    C++简单实现shared_ptr的代码

    智能指针用于资源管理,为了保证资源的操作得到顺利的执行防止资源泄露,因此大多数实现都以noexcept在参数列表后声明为不抛出异常,这篇文章主要介绍了C++简单实现shared_ptr的代码,需要的朋友可以参考下
    2022-09-09
  • C++实操之内联成员函数介绍

    C++实操之内联成员函数介绍

    大家好,本篇文章主要讲的是C++实操之内联成员函数介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • C语言 动态内存开辟常见问题解决与分析流程

    C语言 动态内存开辟常见问题解决与分析流程

    动态内存是相对静态内存而言的。所谓动态和静态就是指内存的分配方式。动态内存是指在堆上分配的内存,而静态内存是指在栈上分配的内存
    2022-03-03

最新评论