Linux编程基础期末冲刺——第六章进程

x33g5p2x  于2021-12-25 转载在 Linux  
字(1.3k)|赞(0)|评价(0)|浏览(397)

1.进程的属性保存在一个被称为___的结构体中,这个结构体中包括__、进程组、进程环境、进程的运行状态等
1、进程控制块/PCB 进程控制符/PID

2.进程在内存中可能会出现不同的状态,通常进程的状态被划分为5种:
初始态,就绪态,运行态,睡眠态,终止态
它们的关系为:


在每次调用fork()函数创建子进程后,子进程和父进程都会继续执行for循环,如当前i=1,则在i=0时父进程创建出的子进程与父进程本身都会创建一个子进程,如下图所示:

因此i=1时fork()函数调用后进程的数量为4,在下一轮循环中,这4个进程又都会创建一个新进程,进程的数量变为8,由此可得,在第5次循环结束后,进程的数量变为32,则子进程的数量为32-1=31。
总结:不跳出子进程,总的进程数量为2^i 即这里是2^5=32个进程
所以子进程为2^i-1
这里是2^5-1=31;

**简答:**见课本p151

看下面wait(NULL)
wait(NULL)
捕获二次子进程
所以先看子进程
pid1子进程睡眠3
pid2睡眠1
先执行pid2,再pid1
所以结果为
child process_2
child process_1
info1 from parent process
info2 from parent process

编程:
编写程序,父子进程打印不同东西

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
	pid_t pid;
	pid = fork();
	if (pid == -1)
	{
		perror("fork error");
		exit(1);
	}
	else if (pid > 0)
	{
		printf("This is parent process.\n");
	}
	else if (pid == 0)
	{
		printf("This is child process.\n");
	}
	return 0;
}

、、
、、
编写程序,创建子进程,使子进程通过exec更改代码段,执行cat命令

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
	pid_t pid;
	pid = fork();
	if (pid == -1)
	{
		perror("fork error");
		exit(1);
	}
	else if (pid > 0)
	{
		printf("parent process:pid:%d\n",getpid());
	}
else if(pid==0)
{
    printf("child process pid:%d\n",getpid());
    //execlp可以使用相对路径
    execlp("cat","-b","exec.c",NULL);//NULL结尾 exec.c是文件名
}
return 0;
}

显示出文件内容 cat命令
相当于
cat -b exec.c

相关文章