赞
踩
在Linux中,fork是非常重要的函数。它从已经存在的进程中创建一个新的进程,新进程为子进程,原进程为父进程。
头文件:<unistd.h>
pid_t fork(void);
返回值:子进程返回0,父进程返回子进程id,出错返回-1
进程调用fork,当控制转移到内核中的fork代码后,内核将:
fork之前父进程独立执行,fork之后,父子两个执行流分别执行,两个进程共享同一份代码。写时拷贝(写入时进行深拷贝)确保了数据的独立。
❓为什么不在创建子进程的时候就重新开辟空间把数据分开,而要写时拷贝?(写时拷贝的优点)
这里首先提出两个问题:
C/C++
中 main
函数 return 0
,是给谁 return
?return 0
,return
其他值可以吗?进程代码跑完,结果是否正确:正确 return 0
,错误应该 return
非零,非零的值不同,表示不同的失败原因。这个非零的值又叫做进程退出码。它表征了进程的退出信息,是需要让父进程读取的(return 给了父进程)。
验证:
写一段代码直接返回一个非零值。
#include <stdio.h>
int main()
{
return 123;
}
[CegghnnoR@VM-4-13-centos 2022_8_16]$ ./mytest
[CegghnnoR@VM-4-13-centos 2022_8_16]$ echo $?
123
[CegghnnoR@VM-4-13-centos 2022_8_16]$ echo $?
0
运行后 echo $?
。$?
表示在 bash 中,最近一次执行完毕时,对应进程的退出码。再 echo
一次就变成 0
了。
在使用指令时,也可以通过 echo $?
查看返回值:
[CegghnnoR@VM-4-13-centos 2022_8_16]$ ls
makefile mytest mytest.c
[CegghnnoR@VM-4-13-centos 2022_8_16]$ echo $?
0
[CegghnnoR@VM-4-13-centos 2022_8_16]$ ls abc
ls: cannot access abc: No such file or directory
[CegghnnoR@VM-4-13-centos 2022_8_16]$ echo $?
2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。