前言

1 fork 之后 之前 确定的是 相等的进程是父进程 
2 fork 会有两个返回值  父进程得到的getpid 是子进程的
  子进程得到的是 0 
3 当子进程对变量操作时 会发生一个“写时拷贝” 对的是父进程拷贝地址的操作
4  产生一块的地址空间 会有 代码区 堆区 栈区 常量区  静态区 的细分 

一 ps 指令

在这里插入图片描述

1 ps a

显示所有程序 和其他用户程序

在这里插入图片描述

2 ps u

user :用户
显示以用户为主的 程序

在这里插入图片描述

3 ps x

在这里插入图片描述


一 显示所有程序 就是不以终端机区分 
1 因为终端机也是进程 
2 不以终端机区分 就是和他有关无关都可以在显示一起。

4 pa aux

123点的总和 

在这里插入图片描述

5 ps ajx

在这里插入图片描述

显示 ppid pid (父子进程的)
COMMAND:命令 

二 kill 指令

kill  : 终止 

在这里插入图片描述

怎么看 SIGTENRM 的信息呢 
kill -l
-l :寻找 

在这里插入图片描述

实际的排序并没64 个 大概 只有60

1 循环 父进程 信号 和部分指令讲解

先改改代码 
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>


int main()
{
     pid_t a;
   
     a=fork();
   
     if(a>0)
     {
         while(2)//变为循环 
         {
             printf("father pid is %d\n",getpid());
         }
     }
     else if(a==0)
     {
         printf("child pid is %d ppid is %d \n",getpid(),getppid());
     }

     return 0;
}

 让 父进程不断循环 待会用 kill 指令 验证他的作用 
1 先 生 成 可执行文件 ./a.out

在这里插入图片描述

2 查看 对应的 pid 序号 

在这里插入图片描述

ps aux  前面 讲了  gerp :查找 

主要讲 | R+ S+ 的意思

2 | ,R+,S+

| : 是管道的意思 (内核一段缓存)

在这里插入图片描述

用户读取数据  管道就是缓存 数据 不断如此,单向读写。

R+ :可执行 状态 (对应二进制文件)
在这里插入图片描述
S+ :可中断 状态(c文件)

因为中断函数 和普通函数 区别只不过 多了一个触发条件而已  
本质都是一样的。

不明白 看 《上电之后main函数如何被cpu运行的 》
再不懂 往前看完 之前 关于这篇的分步 讲解。

3 生成一对 存在的文件和 可执行文件

在这里插入图片描述

注意 会至少存在两个进程 1 :c文件 2 二进制文件 并且是存在的 

如果是这样呢
在这里插入图片描述

先看 aaaaaa 存不存在 

在这里插入图片描述

因为不存在  所以用户没读到 
但是 管道 写了 所以显示   

4 开始终止父进程信号

在这里插入图片描述

kill  -9 发送 终止 信号 
 -9 发送信号 (强制性)

在这里插入图片描述

kill   -9 18428  终止父进程循环 信号
1 18428:是父进程的pid
2 注意 终止的是对应的 c文件 而不是 二进制文件 
 因为杀死的c文件 相当于源头没有了 所以就xxx

在这里插入图片描述

验证成功
Logo

更多推荐