当前位置: 首页 > news >正文

进程的属性

tips:

task_struct就是linux下的PCB

操作系统不相信任何外部用户,而是只提供窗口,不可能直接与用户打交道,而是通过操作系统

tast_struct用来描述所有进程,用来管理

; 和 && 可以同时跑两个命令

进程可以分为两种

一种跑完自动退        

一种要用户自己退出       常驻进程

PID

,进程的标识码,与其他进程区分

同一程序,关闭又打开后PID会变

但同一次启动中,PID是保持不变的

库函数获取自己pid

库函数头文件:sys/types.h

pid_t getpid(void)

pid_t getppid(void)

kill -9  pid              结束进程

ps ajs 查看所有进程

根目录下proc目录

会根据实际进程情况实时更新

/proc目录不是磁盘级文件

关闭电脑,/proc数据会消失

启动电脑,/proc会重新加载

/proc目录不存储在磁盘,不占用磁盘空间,而是在内存,只是在磁盘提供了类似快捷方式的引用。

/proc/[pid]  存放了进程属性

exe属性相当于getppid返回值

cwd属性,

非常重要

current work dir  当前工作目录

cwd记录进程文件启动时路径

chdir(newdir) 更改本程序cwd为dir

多进程

命令行中,执行命令/程序,本质是bash进程,创建的子进程,子进程执行了我们的代码

xshell开了几个窗口,就有几个bash

fork

是个库函数, 要systypes.h头文件

使用系统调用,创建进程

pid_t fork(void)

fork后,会变成两个进程,两个进程为父子关系,代码是共享的,数据是各自私有一份的

fork在父子进程中返回值不同

进程=内核数据结构+代码和数据

fork后子进程会继承父进程代码(代码共享)

进程间数据独立,保证了进程间互不干扰,有很强独立性,即便是父子,即使是全局变量。

创建多进程,多进程间应为一父对多子,这样父可有多子的pid,方便管理

创建多进程demo

#include <iostream>
#include <vector>
#include <sys/types.h>
#include <unistd.h>
using namespace std;const int num = 10;void SubProcessRun()
{while(true){cout << "I am sub process, pid: " <<getpid() <<" ,ppid: " << getppid() << std::endl;sleep(5);}
}int main()
{vector<pid_t> allchild;for(int i = 0; i<num; i++){pid_t id = fork();if(id == 0){// 子进程SubProcessRun();}// 这里谁执行?父进程一个人allchild.push_back(id);}// 父进程cout << "我的所有的孩子是:";for(auto child: allchild){cout << child << " ";}cout << endl;sleep(10);while(true){cout << "我是父进程,pid: " <<getpid() << endl;sleep(1);}return 0;
}

理解创建子进程

创建子进程时,子进程的task_struct是拷贝自父进程的,之后调整新的task_struct部分属性

板书

pid属性:

http://www.lryc.cn/news/440748.html

相关文章:

  • Git 中的refs
  • 408算法题leetcode--第六天
  • ubuntu64位系统无法运行32位程序的解决办法
  • 深入理解Go语言中的并发封闭与for-select循环模式
  • Java学习Day42:骑龙救!(springMVC)
  • 原型模式详细介绍和代码实现
  • ArcGIS Pro SDK (十三)地图创作 5 图层样式
  • 【Python报错已解决】 Requests.exceptions.ProxyError: HTTPSConnectionPool
  • 现在量化中普遍使用QMT和PTrade?哪家可以同时提供QMT/PTrade?
  • 【计算机网络】UDP 协议详解及其网络编程应用
  • 基于ESP32S3的链接大语言模型对话模块
  • Cpp输出多字符常量警告
  • Maven从入门到精通(二)
  • 【Kubernetes】常见面试题汇总(二十四)
  • 最低成本的游戏串流方案分享 如何自己打造云电脑?
  • python运行时错误:找不到fbgemm.dll
  • 给虚拟机linux系统安装交叉编译工具链
  • Redhat 7,8系(复刻系列) 一键部署Oracle21c-xe rpm
  • Web植物管理系统-下位机部分
  • leetcode169. 多数元素
  • 从大脑图谱/ROI中提取BOLD信号
  • Java-数据结构-优先级队列(堆)-(一) (;´д`)ゞ
  • 工厂模式(二):工厂方法模式
  • 【洛谷】P11036 【MX-X3-T3】「RiOI-4」GCD 与 LCM 问题 的题解
  • MyBatis系统学习(三)——动态SQL
  • get_property --Cmakelist之中
  • 【Redis】Redis 典型应用 - 分布式锁原理与实现
  • Pybind11的使用
  • 鸿蒙-沉浸式pc端失效
  • 【资料分析】刷题日记1