终端和进程关系
bash和终端123ps -ef | grep bashUID PID PPID C STIME TTY TIME CMD
pts(虚拟终端),每连接一个虚拟终端到ubantu操作系统就会新出现一个bash进程(shell【壳】),bash运行起来就是那个黑窗口,bash用来解释用户输入的各个命令比如ls,ps等
bash=shell=命令解释器,,,bash是一个可执行文件
用xshell创建一个新连接后可以观察到多了一个bash进程
bash是一个可执行文件,每打开一个终端就会多出一个bash进程。
终端和进程进程组和会话每个进程还属于一个进程组:一个或者多个进程的集合,每个进程组有一个唯一的进程组ID,可以调用系统 函数来创建进程组、加入进程组 “会话”(session):是一个或者多个进程组的集合.
一般,只要不进行特殊的系统函数调用,一个bash(shell)上边运行的所有程序都属于一个会话,而这个会话有一个session leader;
那么这个bash(shell)通常就是session leader; 你可以调用系统功函数创建新的session。
ps ...
虚拟机共享文件夹出现的一些问题
VM中ubuntu虚拟机共享文件夹,mnt下面没有hgfs在vm中安装ubuntu16.0后,设置了共享文件夹。竟然惊奇的发现/mnt目录下面没有/hgfs,所以在虚拟机里面无法打开共享目录。
网上大多数解决方法都是针对/mnt/hgfs目录下面没有共享文件夹的,这里说一下/mnt目录下面没有/hgfs的解决方案。
原因是:VMware Tools的问题,所以要重新安装VMware Tools。
1,选择虚拟机菜单栏–安装VMware tools
2,进入ubuntu,找到VMwaretools-9.6.0-1294478.tar.gz文件,解压,
3,进入解压后的目录,执行:sudo ./wmware-install.pl 然后就一直回车了。
4,重启!
5,完成
共享文件夹消失重启ubantu后出现了一个发现share文件夹消失了
执行命令
1sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other -o uid=1000
hgfs文件夹权限问题但这个时候就又出现hgfs文件夹权限问题,只有root下才能够访问。
这个时候无论使用ch ...
nginx安装与简单使用
ngnix安装环境a)epoll,linux 内核版本为2.6或者以上;b)gcc编译器,g++编译器c)pcre库:函数库;支持解析正则表达式;d)zlib库:压缩解压缩功能e)openssl库:ssl功能相关库,用于网站加密通讯
nginx源码下载以及目录结构简单认识nginx官网 http://www.nginx.org
nginx的几种版本
(1)mainline版本:版本号中间数字一般为奇数。更新快,一个月内就会发布一个新版本,最新功能,bug修复等,稳定性差一点;
(2)stable版本:稳定版,版本号中间数字一般为偶数。经过了长时间的测试,比较稳定,商业化环境中用这种版本;这种版本发布周期比较长,几个月;
(3)Legacy版本:遗产,遗留版本,以往的老版本;
安装,现在有这种二进制版本:通过命令行直接安装;
灵活:要通过编译 nginx源码手段才能把第三方模块弄进来;
nginx 目录
auto/:编译相关的脚本,可执行文件configure会用到这里面的脚本 cc/:检查编译器的脚本 lib/:检查依赖库的脚本 os/:检查操作系统类型的脚本 ...
linux命令
wgetLinux wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器。如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器。这样既浪费时间又浪费精力,那不没办法的事。而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步。wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来方便简单。下面我们以实例的形式说明怎么使用wget。
**1、使用wget下载单个文件
**以下的例子是从网络下载一个文件并保存在当前目录
1wget https://nginx.org/download/nginx-1.20.2.tar.gz
在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。
ps名称:ps使用权限:所有使用者使用方式:ps [options] [–help]说明:显示瞬间行程 (process) 的动态
常用参 ...
深入浅出动态规划
动态规划五部曲
确定dp数组(dp table)以及下标的含义
确定递推公式
dp数组如何初始化
确定遍历顺序
举例推导dp数组
先确定递推公式再确定如何对dp数组初始化
一维动态规划斐波那契数列
时间复杂度:O(n)。
空间复杂度:O(1)。
1234567891011class Solution {public: int fib(int n) { int res[3]; res[0] = 0;res[1] = 1;res[2] = 0; for(int i = 2;i <= n;i++){ res[i%3] = (res[(i-1)%3] + res[(i-2)%3])%1000000007; } return res[n%3]; }};
上台阶问题本质也是斐波那契数列只不过更改了初始值而已。
1234567891011class Solution {public: int numW ...
二分查找算法
通用模板
注意【没有蓝色区域】和【没有红色区域】的细节如何处理, 比如查找第一个大于等于5的元素,如果数组中所有元素都小于5那么,返回的r 直接访问会越界,需要特殊处理一下, 同理 返回 L 的时候如果是-1,也需要特殊处理才行
35. 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
12输入: nums = [1,3,5,6], target = 5输出: 2
示例 2:
12输入: nums = [1,3,5,6], target = 2输出: 1
123456789int searchInsert(vector<int>& nums, int target) { int l = -1,r = nums.size(); while(l+1 != r){ int mid = l + (r-l)/2; if(nums[mid] >= targe ...
shell编程基础
shell是什么Shell是一个命令行解释器 ,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 看一个示意图
脚本格式要求1.脚本以#!/bin/bash开头(表明脚本以什么shell执行的?国内一般是bash)2.脚本需要有可执行权限
编写第一个Shell脚本需求说明:创建一个Shell脚本 ,输出hello world!
脚本的常用执行方式方式1(输入脚本的绝对路径或相对路径)说明:首先要赋予helloworld.sh脚本的+ x权限,再执行脚本
方式2(sh+脚本)说明:不用赋予脚本+x权限,直接执行即可。比如sh hello.sh
shell变量Shell变量介绍
Linux Shell中的变量分为,系统变量和用户自定义变量。系统变量: $HOME、$PWD、$SHELL、 $USER等等,比如: echo $HOME等等.显示当前shell中所有变量: set
shell变量的定义基本语法1.定义变量:变量=值2.撤销变量: unset变量3.声明静态变量: readonly变量,注 ...
栈与队列
两个栈实现一个队列
两个栈实现一个队列,把两个栈看成一个U型队列,stack1队尾那一部分,因此append之间往stack1里面push即可,而stack2是队头那一部分,stack2最上面的即是队列头,因此deletehead只须对stack2执行pop即可。
但是如果stack2是空的怎么办?应该要从stack1那里取一部分放到stack2里面即可。
123456789101112131415161718192021222324252627282930class CQueue {public: stack<int>s1; stack<int>s2; CQueue() { while(!s1.empty()){ s1.pop(); } while(!s2.empty()){ s2.pop(); } } void appendTail(int value ...
操作系统-内存管理
内存基础知识什么是内存内存可存放数据。 程序执行前需要先放到内存中才能被CPU处理——缓和CPU与硬盘之间的速度矛盾
如果计算机“按字节编址” ,则每个存储单元大小为 1字节, 即 1B, 即 8个二进制位如果字长为16位的计算机“按字编址” , 则每个存储单元大小为 1个字; 每个字的大小为 16 个二进制位
进程运行的基本原理指令前8位是操作码,我们写的代码要翻译成CPU能识别的指令。 这些指令会告诉CPU应该去内存的哪个地址读/写数据,这个数据应该做什么样的处理。
指令中的地址参数直接给出了变量 x 的实际存放地址(物理地址),但是其实我们应该放入相对地址,因为生成机器指令的时候不知道进程数据会放到什么地方去。
编译、链接、装入
编译: 由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)链接: 由链接程序将编译后形成的一组目标模块, 以及所需库函数链接在一起, 形成一个完整的装入模块装入(装载) : 由装入程序将装入模块装入内存运行
三种链接方式:
三种方式装入
内存管理概念
内存空间扩充-覆盖与交换
PCB会常驻在内存当中 ...
操作系统基础
操作系统概念
从中间往两边看,从上往下看,从下往上看。
操作系统四个特征
并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的操作系统的并发性指计算机系统中同时存在着多个运行着的程序。一个单核处理机(CPU)同一时刻只能执行一一个程序,因此操作系统会负责协调多个程序交替执行(这些程序微观上是交替执行的,但宏观上看起来就像在同时执行)事实上,操作系统就是伴随着“多道程序技术”而出现的。因此,操作系统和程序并发是- -起诞生的。当今的计算机,一般都是多核CPU,比如Intel的第八代i3处理器就是4核CPU。这意味着同一时刻可以有4个程序并行执行,但是操作系统的并发性依然必不可少。当代人使用计算机绝对有4个以上的程序需要同时工作。
操作系统发展和分类
操作系统运行机制和体系结构
中断和异常
注意内/外中断依据中断信号来自于CPU外部还是CPU内部。
系统调用