printf 1.缓存区放慢会直接打印出来 2.缓冲区未满,强制刷新会直接打印出来 3.程序结束,会打印
强制刷新:fflush(stdout) /n
argc是参数个数 argv是参数内容 envp是环境变量列表
main main.c 在I/O设备(硬盘)
./main 运行在内存中
linux中编译文件是ELF格式 windows中编译文件是PE格式
操作系统:管理内存,管理进程,管理文件系统
操作系统通过进程控制块 PCB进行管理进程,进程控制块是进程进行的唯一标识
进程的三个状态:就绪,运行,阻塞
并发和并行
内存管理
代码段是从0x0804 8000
fork复制谁谁是父进程 赋值后的进程为子进程
fork失败为-1 fork>0 父进程 =0子进程
子进程会在pid_t pid=fork()执行完的地方继续执行,父进程中执行的所有数据也复制给了子 进程.
每一个命令的父进程都是bush
父子进程中变量的物理地址不一样,&n是逻辑地址,代表的是页面内的偏移量,因为fork把偏移量也复制过去所有一样
&/4k=商(所在的页面) 余(在页面的偏移量) 32位系统下 64位下是8k
写实拷贝,如果使用子进程再赋值页表,不使用共用一个页表
./main.c & 把程序挂在后台执行,执行完子进程后 在父进程完以前输入ps命令
进程后加 僵死进程
子进程先结束,父进程没有获取子进程的退出码
父进程先结束后,子进程变成孤儿进程,系统会为子进程再找一个init新的父进程 pid 1
fork面试考察题目:
6个A如果没有n 那么打印出来是8个A
1个A,当printf里没有n A就不会被强制打印出来,会先存在缓冲区 fork会把它一起复制给子进程,当运行父进程 打印一个A 运行子进程时 A又被打印一边



