实验4 理解如何进程控制的实验

这个实验是慕课网站上电子科技大学《Linux操作系统编程》中第五章 实验4 进程控制实验。写在这里便于以后的复习。
想详细了解的可以观看慕课的视频:Linux操作系统编程
先不说其他的知识。只讲一个fork函数。
fork函数有一个很奇妙的地方,一般普通的函数是调用一次,就得到一次的返回值。而fork函数的奇妙之处就是调用一次,它却能得到两次返回值。fork函数会从父进程中创建出一个子进程,然后在父进程和子进程中分别返回不同的值。
在父进程中,fork返回新创建的子进程的进程ID;而在子进程中,fork返回0。这一点等会结合实验结果理解会更直观。

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
	pid_t pid;
	pid = fork();//调用fork函数开始则创建了一个新的子进程
		     //新的子进程从fork返回pid时从这里执行
		     //不同的进程返回值不一样
	if(pid == -1)
	{
		printf("fork error!\n");
	}
	else if(pid == 0)
	{//pip=0代表当前在子进程中
		printf("the returned value is %d, ", pid);
		printf("in child process!!");
		printf("My PID is %d\n", getpid());
	}
	else
	{//父进程pid变量会被赋值为子进程的PID。
	 //也就是说,当返回的值即不是0也不是-1的时候,那个这个值代表什么意思呢?
	 //没错,代表的正是子进程的PID。
	 //得到子进程的PID,说明当前运行的是父进程。
	 //打印顺序不固定,这要看系统的进程调度策略。
		printf("the returned value is %d, ", pid);
		printf("in father process!!");
		printf("My PID is %d\n", getpid());

	}

	return 0;
}

在这个版本的Ubuntu和这个版本的Linux内核下运行的结果为:

panansi@panansi-Lenovo-N40-80:~$ cat /proc/version
Linux version 5.3.0-51-generic (buildd@lgw01-amd64-018) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #44~18.04.2-Ubuntu SMP Thu Apr 23 14:27:18 UTC 2020
panansi@panansi-Lenovo-N40-80:~$ cd 桌面
panansi@panansi-Lenovo-N40-80:~/桌面$ gcc testprocess.c -o process
panansi@panansi-Lenovo-N40-80:~/桌面$ ./process
the returned value is 12187, in father process!!My PID is 12186
the returned value is 0, in child process!!My PID is 12187

从实验结果中可以看出,子进程的PID=12187,而在子进程中,返回值是0。在父进程中,返回的是子进程的PID,父进程的PID=12816。这正是前面所说的“在父进程中,fork返回新创建的子进程的进程ID;而在子进程中,fork返回0。“

总结:上课的时候老师曾举过这个例子,当时每听懂。通过这个例子,已经理解fork返回值的含义。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值