1.vfork
vfork创建出的是线程,vfork的使用可以保证子进程先运行,在vfork出的子进程调用exit或exec函数后,父进程才能运行,在这之前,子进程与父进程共用地址空间以及代码等,在vfork中使用exit和return将会产生不同的结果:
分析原因:
exit(0):正常运行程序并退出
exit(1):非正常运行导致退出
return ( ):如果在主函数main中,则会退出程序并返回一值,如果在其它函数中则会返回到调用函数处。
2.fork
fork()创建子进程,子进程与父进程是独立存在的。
i=0 时 2447-》2449
2447-》2449-》2450
i=1 2447-》2449
2447-》2449-》2451
2447-》2449-》2450
2447-》2449-》2452
理论上是这样,但图片上有的父进程的pid为1,是因为在i<2时,子进程还没有结束,而父进程已经结束了,故,父进程pid为1
3.file_struct
文件结构体代表一个打开的文件,系统中每个打开的文件在内核空间都有一个关联的struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file的指针通常被命名为file或filp。