Linux 进程复制与替换
1、printf 函数输出问题
printf 函数并不会直接将数据输出到屏幕,而是先放到缓冲区中,只有一下三种情况满
足,才会输出到屏幕。
1) 缓冲区满
2) 强制刷新缓冲区 fflush
3) 程序结束时
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[],char* envp[])
{
printf("hello");
//fflush(stdout);
sleep(3);
exit(0);
}
2、主函数参数介绍
int main( int argc, char* argv[], char* envp[])
(1) argc 参数个数
(2) argv 参数内容
(3) envp 环境变量
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
// 参数个数 参数内容 环境变量
int main(int argc, char* argv[],char* envp[])
{
int i = 0;
printf("argc=%d\n",argc);
for( ;i < argc; i++ )
{
printf("argv[%d]=%s\n",i,argv[i]);
}
for( i = 0; envp[i] != NULL; i++ )
{
printf("envp[%d]=%s\n",i,envp[i]);
}
exit(0);
}
3、复制进程 fork
3.1 fork 方法
pid_t fork(void);
函数返回类型 pid_t 实质是 int 类型,Linux 内核 2.4.0 版本的定义是:
fork 函数会新生成一个进程,调用 fork 函数的进程为父进程,新生成的进程为子进程。
在父进程中返回子进程的 pid,在子进程中返回 0,失败返回-1。
要注意的几个问题:
1) 父子进程并发运行的理解
2) 逻辑地址 物理地址
3) 写时拷贝技术