Linux父子进程全局变量与局部变量

简介: Linux父子进程全局变量与局部变量

任务

验证fork后父子进程的全局数据区及栈内存的共享情况。
具体描述:该实验创建2个进程,在父进程中创建一个全局变量,一个局部变量,并赋予初始值,用fork函数创建子进程。在子进程中对父进程的变量进行自加操作,并且输出变量值,后在父进程睡眠一段时间,再输出两个变量,观察子进程和父进程的输出变量值。

相关知识:

getpid //返回当前进程标识;
getppid //返回父进程标识。
sleep //执行挂起指定的秒数

由f o r k创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程I D。将子进程I D返回给父进程的理由是:因为一个进程的子进程可以多于一个,所以没有一个函数使一个进程可以获得其所有子进程的进程I D。f o r k使子进程得到返回值0的理由是:一个进程只会有一个父进程,所以子进程总是可以调用g e t p p i d以获得其父进程的进程I D (进程ID 0总是由交换进程使用,所以一个子进程的进程I D不可能为0 )。子进程和父进程共享很多资源,除了打开文件之外,很多父进程的其他性质也由子进程继承

审核要求:

  1. 提交全部程序代码,代码思路规范清晰,命名规范。
  2. 运行能直接输出所要求的结果。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
pid_t getpid(void);
pid_t getppid(void);
int global = 10;
char buf[] = "a write to stdout\n";

int main(){
  int status;
  int var;
  pid_t pid;
  var = 88;
  printf("%s",buf);
  printf("before fork\n");
  pid = fork();
  if(0 == pid){
    global++;
    var++;
    printf("now is child process\n");
    printf("I am son,id is %d,my parent id is %d,global=%d,global addresss is 0x%x,var = %d,var address is 0x%x\n",getpid(),getppid(),global,&global,var,&var);
 }
  else if(0 > pid){
        printf("fork failed\n");
  }
  else{
    pid = wait(&status);
    printf("now is father process\n");
    printf("I am parent,id id %d,global = %d,global address is 0x%x,var = %d,var addresss is 0x%x\n",getpid(),global,&global,var,&var);
  }
  return 0;
}
相关文章
|
5天前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
18天前
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
66 34
|
22天前
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
59 16
|
1天前
|
Linux
Linux:守护进程(进程组、会话和守护进程)
守护进程在 Linux 系统中扮演着重要角色,通过后台执行关键任务和服务,确保系统的稳定运行。理解进程组和会话的概念,是正确创建和管理守护进程的基础。使用现代的 `systemd` 或传统的 `init.d` 方法,可以有效地管理守护进程,提升系统的可靠性和可维护性。希望本文能帮助读者深入理解并掌握 Linux 守护进程的相关知识。
14 7
|
2月前
|
消息中间件 Linux
Linux:进程间通信(共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)
通过上述讲解和代码示例,您可以理解和实现Linux系统中的进程间通信机制,包括共享内存、消息队列和信号量。这些机制在实际开发中非常重要,能够提高系统的并发处理能力和数据通信效率。希望本文能为您的学习和开发提供实用的指导和帮助。
160 20
|
3月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
128 13
|
3月前
|
SQL 运维 监控
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
|
10月前
|
Linux Shell 调度
【Linux】7. 进程概念
【Linux】7. 进程概念
81 3
|
10月前
|
存储 缓存 Linux
【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解
【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解
|
7月前
|
Linux Shell 调度
【在Linux世界中追寻伟大的One Piece】Linux进程概念
【在Linux世界中追寻伟大的One Piece】Linux进程概念
63 1