作者:victor | 来源:互联网 | 2023-10-11 16:21
@Linux系统进程进程相关解释进程:运行起来的程序在内存中的镜像进程号:系统分配给进程的一个编号,用于标记该进程,便于系统调度管理该进程。进程号唯一,进程号也是有限。进程结束后,
@Linux系统进程
进程相关解释
进程:运行起来的程序在内存中的镜像
进程号:系统分配给进程的一个编号,用于标记该进程, 便于系统调度管理 该进程。进程号唯一,进程号也是有限。进程结束后,会将进程号归还系统。系统可以将归还的进程号分配给新的进程。
进程控制块(pcb):一块内存空间,存放进程的相关信息,便于系统管理。进程号,打开的文件列表,信号列表…
并发:宏观上,多个程序同时运行;微观上,某个时刻,只有一个程序在运行
进程调度算法:先来先执行,短作业优先原则,时间片轮转,优先级调度,多优先级队列时间片轮转
fock()函数创建进程
#include
#include
pid_t fork(void);
fork()通过复制调用进程来创建一个新进程。新进流程被称为子进程。原进程被称为父进程。
子进程和父进程在不同的内存空间中运行。在fork()时,两个内存空间具有相同的内容。 其中一个过程不会影响另一个进程。
成功后,子进程的进程号将在父进程中返回,并且在子进程中返回0。失败时,在父级中返回-1,没有创建子进程。
#include
#include
#include
#include
#include
int main(void)
{
int i = 0;
char caMsg[128] = { '\0'};
pid_t pid = -1;
pid = fork();
if (pid > 0) //parent
{
i = 3;
printf("parent msg addr = 0x%p\n", caMsg);
strcpy(caMsg, "this is parent...");
}
else if (0 == pid) //child
{
i = 6;
printf("child msg addr = 0x%p\n", caMsg);
strcpy(caMsg, "this is child...");
}
else if (-1 == pid)
{
perror("fork");
exit(EXIT_FAILURE);
}
for (; i>0; i--)
{
printf("%s\n", caMsg);
sleep(1);
}
return 0;
}
虽然在Linux中运行显示父进程与子进程地址一样,但其并不相同。
猜猜有几个进程
1.打印多少个g?
#include
#include
#include
int main(void)
{
for(int i=0;i<2;i++)
{
fork();
printf("g\n");
}
return 0;
}
2.打印多少个g?
int main(void)
{
//总共有多少个进程
int i = 0;
for (; i<2; i++)
{
fork();
printf("g");
}
return 0;
}
答案:1、6个 2、8个