目录
前言
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
验证成功