pipe函数
pipe就是无名管道
主要特点如下
半双工,同一时间只能维持一端操作(写入端or输出端)
两个管道,读管道和写管道,两个管道功能单一
储存位置在内存中,且只能作用在父子进程中
数据一旦读走,就会被释放
其中 fd[0] 固定用于读管道,而 fd[1] 固定用于写管道
一般文件 I/O 的函数都可以用来操作管道
当管道里没有数据时,调用 read() 函数从管道中读数据是阻塞的
当管道里数据满时,调用 write() 函数向管道里写数据也是阻塞的
fork函数
fork 函数会生成一个新的进程
调用 fork 函数的进程为父进程,新生成的进程为子进程。
在父进程中返回子进程的 pid(也就是进程id),在子进程中返回 0,失败返回-1
根据返回数据不同,可以判断处于父子进程的哪一个进程
新的进程分配资源,如存储数据和代码的空间。
然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。
lockf函数
lockf函数主要执行对进程的控制
利用系统调用lockf(fd,mode,size),对指定区域(有size指示)进行加锁或解锁,以实现进程的同步或互斥。
其中,fd是文件描述字,也就是管道名
mode是锁定方式,mode=1表示加锁,mode=0表示解锁;
size是指定文件fd的指定区域,用0表示从当前位置到文件结尾
注:有些Linux系统是locking(fd,mode,size)
wait函数
wait进程等待函数
wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;
如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。
wait函数一般是和fork函数成对出现的,wait存在的主要意义就是为了处理僵死状态的子进程,确保进程可以顺利执行
与wait相似的还有一个函数是waitpid,主要区别是可以设置不同的值以达到不同的效果
1.pid>0时,只等待进程ID等于pid的子进程,不管其它已经有多少子进程运行结束退出了,只要指定的子进程还没有结束,waitpid就会一直等下去。
2pid=-1时,等待任何一个子进程退出,没有任何限制,此时waitpid和wait的作用一模一样。
3.pid=0时,等待同一个进程组中的任何子进程,如果子进程已经加入了别的进程组,waitpid不会对它做任何理睬。
4.pid<-1时,等待一个指定进程组中的任何子进程,这个进程组的ID等于pid的绝对值。
以上就是我个人对c语言进程管理相关函数的总结
如果有错误的地方,欢迎评论指出