14-操作系统上的进程 (forkexecveexit)

14-操作系统上的进程 (fork/execve/exit)

立即复制状态机

  • 包括

    所有

    信息的完整拷贝

    • 每一个字节的内存
    • 打开的文件 (共享)
    • ……
    • 复制失败返回 -1
      • errno 会返回错误原因 (man fork)

如何区分两个状态机?

  • 新创建进程返回 0
  • 执行 fork 的进程返回子进程的进程号

系统调用的返回值放在rax中

1
2
3
4
f(){
f | f &
}
f

printf缓冲区在每一个进程的内存里,fork会一起复制

遇到了粘贴时乱码问题

execve把当前的进程重置成一个可执行文件描述状态机的初始状态

第三个参数是环境变量

fork默认直接把环境变量会继承

strace的使用

./demo当前目录下的程序