上上篇
接上篇
getpid()
man手册里有,库调用,系统调用
linux系统编程专题(四) 系统调用简介 && man手册_man手册里面的函数都是系统调用吗-优快云博客
我们执行的的所有指令,工具,自己写的程序运行起来,都是进程
getpid其实获取的就是一个整数
ps指令查找所有的进程
以特定的格式显示axj
top来查
一次执行两个命令,去显示最近一次执行的指令
管道去查看
grep自己也是一个进程,每次查的时候会把自己grep带上
杀掉进程
ctrl+c,或者
补充知识
完成任何操作都是靠进程,以进程的方式去访问操作系统,进程也叫任务,
task,
查看命令还可以proc
操作系统给你,列出了内存级的文件系统,
100人,90人去了外国,学校内的学生数据都是100人
每个进程都能转换为文件
蓝色的目录---数字可能是pid
暂时理解里面都是存储了进程
-l 查看这个目录的属性
每一个进程都有一个exe,一个进程对应的可执行的程序
即使你在这里删掉了,没有直接影响进程,因为你这个进程已经拷贝到磁盘了
cwd,可执行程序的路径,记录在哪个路径下面启动的
c语言里打开一个文件
fopen(),不带路径就在当前路径新建,
当前路径是进程,进程会记录下来自己的当前路径,
csd-> ..../..../ .../ (你后续的操作,在这里创建了一个新的文件什么,它直接在后面续(拼接)上一个 .../)
pcb会记录下来,库自己做的
如果你能改它的cwd,你的操作路径就会改变
change dir,,,,cd路径怎么做的切换,shell怎么去操作的,这里扩展
ps,
getppif获取父进程id
所有的子进程都是由它的父进程创建的,进程也是进程树,多叉树的结构,我们知道自己是一个进程,那你的父进程呢
反复的执行这个程序,发现每次pid会变化,但是父进程不变
每一次启动进程其实是,都是向系统里重新加载,你每一次考大学,再考进来学号都变了
那就查这个父进程看看,哦查到是bash,命令行解释器(王婆)本质也是一个进程,王婆和实习生的故事,命令行解释器
所以每一次登录就有一个bash,所以每一次登录的时候,系统为每一个用户分配一个bash,所有的命令都是以字符串给bash,bash拿到这个命令就去分析了,
我们自己的命令就是一个实习生,(王婆要保护自己的口碑,不亲自出击了),命令的父进程全都是bash
用代码创建子进程
补充:趣事
查fork一直没反应就查了资料下面解决了
Linux||man命令中查找内容时提示No manual entry for ..._man查看时no manual entry for execl-优快云博客
紧接着会变成两个进程流,变成两个进程,都会执行后续的代码,
父进程task_struct
进程的代码和数据
进程=pcb+自己的代码和数据
创建进程,必定要给子进程创建一个pcb,父进程的pcb会直接有部分拷贝到子进程里,大部分属性一样,父进程的pcb指向其自己代码和数据,子进程默认也会指向父进程的数据和父进程的代码
所以子进程再调度,就会执行父进程之后的代码,有个人抄了你的简历,但是电话一样,就是最终都要找到你,子进程没有独立的代码和数据,因为目前,还没有程序重新加载,共享父进程的代码和数据,pcb就是一个类
man fork
return value
仔细读会有两个返回值
fork()会有两个返回值,
想让父子干不同的逻辑,
父亲的返回值大于0,孩子的返回值为0
下面是模拟过程,可以查看到运行后的父子关系
从pid t_id = fork()之后所有的代码都是父子共享的
问题是
为什么fork()给父子返回各自不同的值
为什么一个函数会返回两次
为什么一个变量。既可以大于0又可以==0.导致if else同时成立
解释第一个
父 :子 =1 : n,
父进程在fork后,子进程拷贝其的东西会把自己的id返回给父亲,父进程有多个孩子,他通过这个返回的不同的id去区分自己的孩子,以方便父亲去管理。
解释第二个
一个函数返回两次
如果一个函数已经执行到return,它的主体是否执行完了?它的核心功能其实是已经结束了,就是这个函数的核心功能,
当你进入fork()函数,执行完就返回id,
如下图解释
补充:进程具有独立性,父进程挂了,子进程也正常
你打开微信崩了不一定影响我打开其他软件
数据默认是共享的,但是一旦有任何一方尝试修改这个数据,OS把被修改的数据在底层自动拷贝一份,写时拷贝,各自都有一份,怎么拷贝,怎么让一个变量看到两个值,后面讲
写时拷贝是在内存中有不同的地址 ,当代计算机的内存的(物理地址)地址看不到,变量的地址可以看见,两个不同的值但是地址(这个地址就不可能是物理地址)一样
代码是共享的,下面你看你子进程怎么改,我父进程都是100
补充:改背景
xshell自带改背景
scp C:\path\to\your\file.txt username@your_server_ip:/path/to/destination/directory/
下篇僵尸进程