2.3创建进程函数fork的使用补充(第二阶段)

本文通过具体代码示例,详细介绍了如何使用fork函数创建进程。包括如何获取当前进程ID,并根据父子进程的不同行为进行区分打印。

2.3创建进程函数fork的使用补充(第二阶段)

代码展示

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

int main()
{
	pid_t pid;
	pid_t pid2;	
	pid_t retpid;

	pid = getpid();
	
	printf("before fork:pid = %d\n",pid);//子进程
		
	retpid = fork();


	pid2 = getpid();
	
	printf("after fork:pid = %d\n",pid2);//父进程
	
	
	if(pid == pid2){

		printf("this is father print,retpid:%d\n",retpid);
	}else{

		printf("this is child print,retpid:%d,child pid = %d\n",retpid,getpid());
	}


	return 0;
}
VMware实验 2 进程管理 实验性质:验证 建议学时:2 学时 任务数: 3 个 一、 实验目的  掌握 linux 进程管理命令  阅读 linux 内核 PCB 块相关代码  使用 C 语言创建一个进程及其子进程,掌握创建进程的方法,理解进程和程 序的区别。 二、 预备知识 1. linux 命令行 shell 的使用 2. 教材第二章 2.1~2.3 三、 实验内容 3.1 Linux 进程管理命令 3.1.1 进程管理的作用  判断服务器健康状态  查看系统中所有进程  杀死进程 3.1.2 ps 命令(查看当前系统中进程的快照) 结果默认会显示 4 列信息: PID: 运行着的命令(CMD)进程编号 TTY: 命令所运行的终端 TIME: 运行着的该命令所占用的 CPU 处理时间 CMD: 该进程所运行的命令 3.1.3 top 命令(实时动态地查看系统的整体运行情况) 3.1.4 kill 命令(终止进程3.2 Linux 内核中 PCB 代码分析 阅读并分析/usr/src/linux-headers-5.4.0-62-generic/include/linux/sched.h 中进程控制块 相关定义。 找到进程控制块结构体定义,对应教材分析 3.3 Linux 进程控制 fork()通过复制调用进程创建一个新进程。新进程被称为子进程;调用进程被称 为父进程函数特点 :  子进程和父进程在不同的内存空间中运行。  在 fork()的时候,这两个内存空间有相同的特性内容,两个进程将执行 fork() 系统调用之后的下一条指令,子进程使用相同的 CPU 寄存器值。  其中一个进程执行的内存写、文件映射和反映射不会影响另一个进程。 基本使用方式如下 参考实例代码:test001.c 四、 思考与练习 1. ps 命令的参数的使用,如显示所有当前进程,显示指定用户进程等。 2. 分析 task_struck 结构体中主要字段的含义。 3. 分析父进程和子进程的关系 在虚拟机怎么完成该实验
03-20
### 在 VMware 虚拟机中进行 Linux 进程管理实验 #### 实验环境搭建 为了在虚拟机环境中完成 Linux 进程管理的相关实验,首先需要安装并配置好 VMware 和目标操作系统(如 Ubuntu 或 CentOS)。确保虚拟机能够正常启动,并具备网络连接功能以便于下载必要的工具和软件包。 #### 使用 `ps` 命令查看进程信息 `ps` 是用于显示当前系统上运行的进程状态的一个重要命令。它提供了关于每个正在运行的任务的信息,比如 PID (Process ID),USER, STAT(状态), TIME(使用的 CPU 时间) 及 COMMAND(所执行的具体指令)[^2]。 基本语法如下所示: ```bash ps aux ``` 上述命令会列出所有用户的全部进程及其详细资料[^1]。 #### 利用 `top` 动态监控系统性能 除了静态展示外,还可以借助交互式的 `top` 工具来实时观察系统的资源消耗情况。此命令不仅呈现了各个进程的状态数据,还包含了内存利用率、CPU 占有率等全局统计指标。 ```bash top ``` 当进入 top 界面之后,可以通过按键 &#39;k&#39; 来手动杀死某个指定编号的目标进程;或者按 q 键退出界面返回 shell 提示符处[^3]。 #### 学习与实践 kill 终止信号发送技巧 有时我们需要停止某些特定的服务或应用,则可以采用 send signal 的形式通知它们结束工作。“kill” 并不意味着真正摧毁文件实体而是向其传递消息让其自行关闭。最常用的几种类型包括 SIGTERM(-15 默认温和请求关闭)、SIGKILL (-9 强制立即销毁)等等。 例如要安全地中止 pid=1234 的程序可尝试下面这条语句: ```bash kill 1234 # 发送默认 TERM 信号给 id 为 1234 的进程 ``` #### 探索 fork() 创建进程的能力 最后我们来看一下 C 库函数 int fork(void); 它的作用就是复制调用它的那个现有流程从而形成一对父子关系的新个体出来。成功时返回两次不同的数值——对于父亲来说是非零整数代表孩子身份标签而儿子那边则得到的是简单的零值表示自己刚诞生不久的事实。 下面是一个简单例子演示如何利用 fork 构建多级嵌套结构: ```c #include <stdio.h> #include <unistd.h> int main(){ printf("Before Fork\n"); switch(fork()){ case -1 : perror("Fork failed!"); break; case 0 : /* Child Process */ printf("Child process here! My PID is %d.\n", getpid()); _exit(0); default : /* Parent Process */ wait(NULL); // Wait until child finishes. printf("Parent continuing...\n"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值