个人理解总结 Linux系统编程之进程

本文中的章节都是以疑问句的形式记录 , 也是希望大家带着问题来学习、总结进程相关知识 。说不定会在以后的面试中会被问到 。
文章目录六、几种特殊进程七、exec*族函数八、函数九、poen函数
一、什么是程序 , 进程?(面试)
程序:就是一些指令和数据的集合是一个静态的概念 。
【个人理解总结Linux系统编程之进程】进程:简单来说就是运行中的程序 , 是一个动态的概念 。
二、什么是进程标识符?(面试)
每个进程都有自己唯一的非负整数来表示进程称为进程标识符 。
三、如何查看系统中有哪些进程?
1.ps -aux
四、c程序的存储空间是如何分配的?(面试)
五、创建子进程 1.fork()
#include#include #include #includeint main(){pid_t pid;int data=http://www.kingceram.com/post/0;pid=fork();while(1){if(pid==0){printf("this is child process!my pid=%d\n",getpid());}else if(pid>0){printf("this is parent proscess!my pid=%d\n",getpid());}}return 0;}
2.fork()创建的子进程数据情况
由fork()创建的子进程 , 是父进程的副本 。子进程拥有父进程的数据空间 , 堆 , 栈的一份拷贝 , 但父子进程不共享这部分空间 。
#include#include #include #includeint main(){pid_t pid;int data=http://www.kingceram.com/post/0;pid=fork();printf("before fork data = http://www.kingceram.com/post/%d/n",data);if(pid==0){printf("this is child process!my pid=%d\n",getpid());printf("data in child process = %d\n",data);}else if(pid>0){printf("this is parent proscess!my pid=%d\n",getpid());data++;printf("data in parent process = %d\n",data); }return 0;}
3.vfork()创建子进程的数据情况
vfork创建的父子进程 , 共享数据空间 , 且父进程等待子进程运行完 , 所以子进程结束需要调用exit()函数不然父进程不知道子进程退出与否 , 还一直等 。
#include#include #include #includeint main(){pid_t pid;int data=http://www.kingceram.com/post/0;pid=vfork();printf("before fork data = http://www.kingceram.com/post/%d/n",data);if(pid==0){printf("data in child process = %d\n",data);data++;printf("this is child process!my pid=%d\n",getpid());sleep(1);exit(1);}else if(pid>0){sleep(1);printf("this is parent proscess!my pid=%d\n",getpid());printf("data in parent process = %d\n",data); }return 0;}
4.fork()创建子进程的目的?
1.通常在网络服务进程经常会使用到 , 父进程等待客户端的请求 , 当请求到达时 , 使用fork()与客户端进行对接 。当再来一个对接信号时 , 再fork()
2.一个进程需要执行不同的程序时 , 使用fork()通常与exec*族函数配合使用
六、几种特殊进程

个人理解总结  Linux系统编程之进程

文章插图
1.进程0:也叫做交换进程()(内核态进程)
2.进程1:也叫做init进程(用户态进程)
3.僵尸进程:父进程不关心子进程的运行情况 , wait(NULL)(有危害–容易导致崩溃)
4.孤儿进程:父进程先于子进程退出 , 被init进程收养 。(无危害)
七、exec*族函数
execl(“文件路径”,“可执行文件名” , 参数 , NULL)
#include #include #include #include #include #include #include #include #include #include int main(){pid_t pid;int data = http://www.kingceram.com/post/10;while(1){printf("please input a data\n");scanf("%d",&data); if(data =http://www.kingceram.com/post/= 1){int fdSrc;pid = fork();if(pid> 0){wait(NULL);}if(pid == 0){execl("./changData","changData","config.txt",NULL);}}else{printf("wait ,do nothing\n");}}return 0;}