argc 传进的参数个数
argv :参数
注意:利用for循环打印char* argv[]
for循环内部不能直接定义int i=0; 内置不对算法
[root@localhost 2020-03-19]# ls main main.c [root@localhost 2020-03-19]# ./main argc:1 argc[0]=./main [root@localhost 2020-03-19]# ./main hello world argc:3 argc[0]=./main argc[1]=hello argc[2]=world [root@localhost 2020-03-19]# ./main "hello world" argc:2 argc[0]=./main argc[1]=hello world
缓冲区 加载 中止条件 /\n
当遇到n的时候,才把缓冲区的内容所有输出
注意:exit(0) 与_exit(0)的区别 :
_exit(0) 不会去刷新缓冲区,直接结束进程并发
fork()后,会生成一个独立的子进程,父进程fork()后会返回子进程的pid,子进程会返回0
(子进程与父进程的pid !=)函数
pid_t pid = fork();
建立(复制)的子进程会跳过建立他的fork(),避免进入死循环spa
PCB里面有单独的一部分 去记录 当前节点的父进程ppid是谁,咱们很容易经过子进程去 寻找父进程;
因此能够经过tid_t getppid(); 经过子id获得父id
可是咱们应该怎么去寻找父进程的子进程呢?操作系统
因此在子进程返回给父进程过程当中 记录下儿子的pid
便于之后去查找本身的儿子
仅此一次机会记录下来
子进程和父进程是两个进程
先执行谁取决于操做系统的调度算法 -并发执行 code
若是指明想要父子进程两个进程之间谁去容许 运行
能够利用:父进程会返回子进程pid 子进程返回0这一特性
使用这样的blog
if(pis==0) ..子进程.. else ..父进程..
注意事项:第二次循环的时候父子进程都进行了fork复制,因此有3个A3个B进程
去掉n之后
缓冲区原本有的值也赋值了
AB | i=1
AB AB |i=2
+AB |i=1
因此会出现4个A 4个B图片
for(i=0;i<2;++i) { pit_t pid = fork(); assert(-1 != pid); if(pid == 0) { printf("A "); } else { printf("B "); } }
因此是3个A内存
引入写时拷贝技术: