Linux系统编程—进程学习
进程的相关内容
创建进程函数fork的使用
vfork创建进程
进程退出的方式
父进程等待子进程退出
孤儿进程
一、进程的相关内容
1.什么是进程,什么是程序,区别是啥?
程序是静态的概念,gcc xxx.c -o pro,磁盘中生成的pro文件就叫做程序;
进程是程序的一次运行活动,通俗的说就是程序跑起来,系统就多了一个进程。
2.如何查看系统中的进程?
使用ps指令查看,同时可使用grep来查找程序中你想找的某个进程
3.什么是进程标识符?
每个进程都有一个非负整数表示的唯一ID,叫做pid,就是进程标识符。
pid=0:称为交换进程(swapper)作用——进程调度
pid=1:init进程 作用——系统初始化
4.什么是父子进程?
进程A创建了进程B,A叫做父进程,B叫做子进程。
5.c程序的存储空间是如何分配的?
二、创建进程函数fork的使用
代码示例:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
printf("this is pid=%d\n",getpid());
pid= fork();
if(pid>0){
printf("this is father pid, pid=%d\n",getpid()); // 父进程
}else if(pid==0){
printf("this is son pid,pid=%d\n",getpid()); // 子进程
}
return 0;
}
三、vfork创建进程
代码示例:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
pid_t pid;
int cnt=0;
pid=vfork();
if(pid>0){
while(1){
printf("cnt=%d\n",cnt);
printf("this is father pid, pid=%d\n",getpid()); //父进程
sleep(1);
}
} else if(pid==0){
while(1){
printf("this is son pid,pid=%d\n",getpid()); //子进程
sleep(1);
cnt++;
if(cnt==3) //当cnt=3时,子进程退出
{
exit(0);
}
}
}
return 0;
}
四、进程退出的方式
1.正常退出
2.异常退出
五、父进程等待子进程退出
代码如下:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
pid_t pid;
int cnt=0;
int status=10;
pid=fork();
if(pid>0){
wait(&status); //等待子进程的退出
//waitpid(pid,&status,WNOHANG);
printf("son pid quit,son status=%d\n",WEXITSTATUS(status));// 收集子进程退出的号
while(1){
printf("cnt=%d\n",cnt);
printf("this is father pid, pid=%d\n",getpid());
sleep(1);
}
} else if(pid==0){
while(1){
printf("this is son pid,pid=%d\n",getpid());
sleep(1);
cnt++;
if(cnt==5){
exit(2); //子进程程序退出
}
}
}
return 0;
}
六、孤儿进程
代码示例:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
pid_t pid;
int cnt=0;
pid=fork();
if(pid>0){
printf("this is father pid, pid=%d\n",getpid());
}else if(pid==0){
while(1){
printf("this is son pid,pid=%d,my father pid=%d\n",getpid(),getppid());
sleep(3);
cnt++;
if(cnt==5){
exit(2);
}
}
}
return 0;
}
总结:
要理解清楚进程的相关概念及作用,懂得其用法。