一.什么是程序?什么是进程?有什么区别?
1.程序是静态的概念 , gcc xxx.c-o pro
磁盘中生成pro文件,叫做程序
2.进程是程序的一次运行活动,通俗点意思是程序跑起来了,系统中就多了一个进程。
二.如何查看系统中有哪些进程?
1.使用ps指令查看,实际工作中,配合grep来查找程序中是否存在某一进程。
ps -aux|grep X
2.使用top指令查看,类似Windows任务管理器
top
三.什么是进程标识符?
每个进程都有一个非负整数表示的唯一ID,叫做pid,类似身份证,
Pid=0:称为交换进程
作用---进程调度
Pid=0:init进程
作用---系统初始化
注意:编程调用getpid函数获取自身的进程标识符,getppid获取父进程的进程标识符。
四.什么叫父进程?什么叫子进程?
进程A创建了进程B
进程A叫做父进程,B叫做子进程,父子进程是相对的概念,理解为人类中的父子关系。
五.使用fork函数创建一个进程
pid_t fork(void);
fork函数调用成功,返回两次
返回值为0,代表当前进程是子进程
返回值非负数,代表当前进程为父进程
调用失败 ,返回-1
六.vfork
vfork与fork的区别
1.vfork直接使用父进程存储空间,不拷贝
2.vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行
七.进程退出
正常退出:
1.main函数调用return
2.进程调用exit(),标准c库
3.进程调用_exit()或者_Exit(),属于系统调用
补充:
1.进程最后一个线程返回
2.最后一个线程调用pthread_exit
异常退出:
1.调用abort
2.当进程收到某些信号时,如ctrl+c
3.最后一个线程对取消请求做出响应
八.父进程等待子进程退出
1.父进程等待子进程退出,并收集子进程的退出状态
子进程退出状态不被收集,变成僵尸进程
2.孤儿进程
父进程如果不等待子进程退出,在子进程之前就结束了自己的”生命“,此时子进程叫做孤儿进程。
Linux避免系统存在过多孤儿进程,init进程收留孤儿进程,变成孤儿进程的父进程。
九.exec族函数
作用:用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另一个,当进程调用exec函数时,该进程被完全替换为新程序,因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。
exec配合fork使用
实现功能,当父进程检测到输入为1的时候,创建子进程把配置文件的字段值改掉。
十.system函数
函数返回值如下:
成功:则返回进程的状态值,当sh不能执行时,返回127
失败返回-1
十一.popen函数
比system在应用中的好处:可以获取运行的输出结果