Linux进程的操作

 Linux进程的前置知识-优快云博客

上上篇 



Linux进程的正式知识-优快云博客

接上篇

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/
 

下篇僵尸进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值