- execve
execve() 系统调用的作用是运行另外一个指定的程序。它会把新程序加载到当前进程的内存空间内,当前的进程会被丢弃,它 的堆、栈和所有的段数据都会被新进程相应的部分代替,然后会从新程序的初始化代码和main函数开始运行。同时,进程的ID将 保持不变。
注意:exec之后会继承父进程的句柄,所以在open时可以选择子进程不继承句柄的选项 - fork
fork创建子进程的时候,父子进程是单独的虚拟内存空间,但是是共享一块物理内存空间;如果存在写,不会影响其他进程的 内容,但是会再开辟一块物理内存空间(fork写时复制copy-on-write,所以速度也很快)
a. 多线程进程fork的时候,fork和execve之间只能调用信号安全的函数,避免死锁
解释多线程下fork的博客:
https://www.cnblogs.com/liyuan989/p/4279210.html
https://breezetemple.github.io/2021/01/15/fork-safe/
只能调用信号安全的函数出处:
https://man7.org/linux/man-pages/man2/fork.2.html
fork和execve相关记录
于 2023-07-04 21:02:03 首次发布