Linux编程基础 3.1:进程管理-1:
学习内容:
1.1创建进程
掌握对进程进行管理控制的四个函数:
fork():一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。
exec函数族:exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。
wait():编程过程中,有时需要让一个进程等待另一个进程,最常见的是父进程等待自己的子进程,或者父进程回收自己的子进程资源包括僵尸进程。这里简单介绍一下系统调用函数
exit():为退出程序的函数
2.2创建多个进程
只需对创建进程进行循环即可创建多个进程
int i;
for(i = 0; i < 2; i ++){
tempPid = fork();
}//of for i
如果只希望父进程可以创建新进程,则在for循环中添加一个判断:若当前进程不是父进程,则跳出循环。
test_fork2.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
pid_t tempPid;
int i;
for(i = 0; i < 2; i ++){
if((tempPid = fork()) == 0){
break;
}//of if
}//of for i
if(tempPid == -1){
perror("fork error");
}else if(tempPid > 0){//parent
printf("parent process, pid = %d, ppid = %d\n", getpid(), getppid());
}else{//child
printf("I am child process = %d, pid = %d, ppid = %d\n", i + 1, getpid(), getppid());
}//of if
printf("......finish......");
return 0;
}//of main
1.3 进程的执行顺序:利用sleep函数,暂缓进程执行
test_fork3.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
pid_t tempPid;
int i;
for(i = 0; i < 2; i ++){
if((tempPid = fork()) == 0){
break;
}//of if
}//of for i
if(tempPid == -1){
perror("fork error");
}else if(tempPid > 0){//parent
sleep(2);
printf("parent process, pid = %d, ppid = %d\n", getpid(), getppid());
}else{//child
sleep(i);
printf("I am child process = %d, pid = %d, ppid = %d\n", i + 1, getpid(), getppid());
}//of if
printf("......finish......");
return 0;
}//of main
学习时间:
2022/5/6
学习总结:
1.与大二上学习的Java进程大同小异,所以学习较为轻松
2.由于之前过度依赖IDEA pycharm 这类编译器 现在对codeblocks的使用还是较为生疏。