fork函数是linux中创建进程的函数,linux创建进程只有用fork,别无他法。我自己写代码fork用的不多,对它的一些细节还不是清楚,今天抽空研究了下fork,把它的一些关键点总结一下,以后用到了自己也好有个参考。
1)fork函数会在父进程中创建子进程,子进程的堆,栈,数据段,PC指针都是从父进程中复制过来的,和父进程是独立的,但是内容是一致的。代码段子进程和父进程是共享的。
2)fork()的返回值可能为-1,0,和一个正数。-1表示fork()调用失败,0表示返回子进程执行结果,正数表示返回父进程结果(正数即为子进程ID)。
3)在fork的时候,缓存被复制到了子进程空间。这点可以详细参考http://coolshell.cn/articles/7965.html,我觉得这个帖子写的很好,很详细。
在进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。所以只要掌握了execve用法就可以了。这里我写了个例子,说明execve用法。
/*
* execve.c
*/
#include<unistd.h>
int main()
{
char * argv[ ]={“./test”,”test_sample”,(char *)0};
char * envp[ ]={0};
execve(“./test”,argv,envp);
return 0;
}
/*
* test.c
*/
#include <stdio.h>
int main(int narg,char **args)
{
if(narg != 2)
{
printf(“error,the input parameter must be one!\n”);
return -1;
}
char *str = args[1];
printf(“the input parameter is %s\n”,str);
return 0;
}
cc -g -o test test.c
生成test应用程序
然后
cc -g -o execve execve.c
生成execve应用程序
执行./execve即可调用test应用,输出
test_sample
转载于:https://blog.51cto.com/4895268/1408496
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109833.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...