我是靠谱客的博主 背后帅哥,这篇文章主要介绍2021-2022学年——嵌入式系统实践实验3_Process实验Process实验,现在分享给大家,希望可以做个参考。

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”目录

复制代码
1
2
#cd /opt/WXL/Basic

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

复制代码
1
2
# mkdir process

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

复制代码
1
2
# touch process.c

在这里插入图片描述

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

复制代码
1
2
# touch Makefile

在这里插入图片描述

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

复制代码
1
2
# make

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

复制代码
1
2
#chmod 775 process

在这里插入图片描述

3.4执行程序命令:

复制代码
1
2
# ./process

在这里插入图片描述

附录

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#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 %dn", getpid()); printf("tchild ppid is %dn", getppid()); exit(EXIT_SUCCESS); default: // father process waitpid(child, &stat, 0); printf("This is parent.n"); printf("tparent pid is %dn", getpid()); printf("tparent ppid is %dn", getppid()); printf("tchild exited with %dn", stat); }

Makefile文件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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*-

最后

以上就是背后帅哥最近收集整理的关于2021-2022学年——嵌入式系统实践实验3_Process实验Process实验的全部内容,更多相关2021-2022学年——嵌入式系统实践实验3_Process实验Process实验内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部