IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 2021-2022学年——嵌入式系统实践实验3 -> 正文阅读

[系统运维]2021-2022学年——嵌入式系统实践实验3

Process实验

实验目的

  1. 熟悉 Linux 应用程序编程;
  2. 掌握 Linux 多进程程序编写。

实验设备

实 验 设 备数 量备 注
感知 RF2-210 实验箱1运行 linux 程序
串口线1连接网关板 COM3 与 PC 串口
PC 机1编译和下载程序

实验内容

创建一个新进程后,打印各自的 PID 和 PPID。父进程须对子进程退出状态进行检测和回收。

实验原理

? 进程是一个正在执行的程序实例,是 Linux 调度的基本单位。
? 进程 ID
? 仅介绍最常用的进程 ID(Process ID,PID)和父进程 ID(Parent Process ID, PPID)。一个PID标识一个唯一的进程。一个进程创建的新进程称为子进程(child process),创建子进程的进程称为父进程(parent process)。
? 相应的获取进程 ID 的函数:
? getpid(void)
? getppid(void)
? 进程的其它 ID 也都有相应的读取函数。
? 创建进程
? 在 Linux 中,使用 fork()函数创建子进程进程。函数原型:
? pid_t fork(void)
? 如果创建失败,返回-1;创建成功,则向父进程返回子进程的 PID,并向子进程返回 0。
? 等待进程
? 创建子进程后,为了出现避免出现僵死状态,父进程应该收集子进程的退出 状态,等待子进程终止。可使用 wait 系列函数实现。如果一个子进程已经死掉, 但依然保留在进程表中,则成为僵死进程,占用进程表。如果僵死进程过多,会 严重影响系统性能。下面介绍 waitpid()函数。
pid_t waitpid(pid_t pid, int *status, int options)
? pid 是等待进程的 PID。
? status 保存子进程的状态。
? -1:等待任何 PGID 等于 PID 的绝对值的子进程;
? 1 :等待任何子进程;
? 0 :等待任何 PGID 等于调用进程的子进程;
? >0 :等待 PID 等于 pid 的子进程。
? options 规定 wait 调用的行为(可复选)。
? WHOHANG:没有子进程退出时立即返回;
? WUNTRACED:为没有存在报告状态的进程返回。

实验步骤

1.进入虚拟机ubuntu系统下,打开终端调试软件进入“/opt/WXL/Basic”实验操作目录
在这里插入图片描述
? 输入以下命令进入“/opt/WXL/Basic”目录

#cd /opt/WXL/Basic

2.编译实验代码
2.1 输入以下命令新建process文件夹

# mkdir process

2.2 进入process实验目录
? 输入以下命令新建process.c文件并填写内容

# touch process.c

在这里插入图片描述

? 输入命令新建Makefile文件并填写内容

# touch Makefile

在这里插入图片描述

2.3 编译生成可执行文件
? 输入命令如下进行编译

# make

? 编译完成后在/opt/WXL/Basic/process 目录下生成了可执行目标文件 process。
3.下载到目标板执行
? 将生成的可执行文件“process”拷贝到Windows目录下,通过超级终端使用串口下载到感知RF2-210实验箱目标板上运行。
3.1拷贝可执行文件到Windows;
3.2通过超级终端发送文件到感知RF2-210;
3.3修改可执行文件的权限和执行
修改权限输入命令:

#chmod 775 process 

在这里插入图片描述

3.4执行程序命令:

# ./process

在这里插入图片描述

附录

以下代码有问题
process.c文件

#include 
#include 
#include 
#include 
#include 
#include 
int main(int argc, char **argv) 
{ 
	int val, stat; 
	pid_t child; 
	printf("\nTry to create new process.\n"); 
	child = fork(); 
	switch(child) { 
		case -1: // fault 
			perror("fork.\n"); 
			exit(EXIT_FAILURE); 
		case 0: // child process 
			printf("This is child.\n"); 
			printf("\tchild pid is %d\n", getpid()); 
			printf("\tchild ppid is %d\n", getppid()); 	
			exit(EXIT_SUCCESS); 
		default: // father process 
			waitpid(child, &stat, 0); 
			printf("This is parent.\n"); 
			printf("\tparent pid is %d\n", getpid()); 
			printf("\tparent ppid is %d\n", getppid());
			printf("\tchild exited with %d\n", stat);
 }

Makefile文件

EXEC = process
OBJS = process.o
SRC = process.c

CC = arm-linux-gcc
CFLAGS += -O2 -Wall
LDFLAGS +=

all:$(EXEC)
$(EXEC):$(OBJS)
	$(CC) $(CFLAGS) -c $@ $(OBJS)
%.o:%.c
	$(CC) $(CFLAGS) -c $< -o $@
clean:
	@rm -vf $(EXEC) *.o*-
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:32:08  更:2021-11-18 11:33:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:37:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码