《现代操作系统》02章 进程与线程(一)
0 序言1 进程1.1 进程模型1.2 创建进程1.2.1 触发进程创建1.2.2 创建过程
1.3 进程终止1.3.1 触发进程终止1.3.2 注意
1.4 进程层次结构1.5 进程状态与转换1.6 进程实现1.7 多道程序设计模型
2 线程2.1 线程的使用2.2 经典的线程模型2.2.1 单线程模型2.2.2 多线程模型
2.3 POSIX线程2.4 在用户空间中实现线程2.5 在内核中实现线程2.6 混合实现线程2.7 调度程序激活机制2.7.1 上行调用2.7.2 阻...
线程的概念线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务,在单个程序中同时运行多个线程完成不同的工作,称为多线程进程的概念进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也...
#进程池异步提交的回调函数是在主进程中进行的--------------------------------------#查看进程号可知from multiprocessing import Poolimport timeimport os
def func1(i):??? print(os.getpid())??? time.sleep(1)??? return i+1
def func2(m):??? print('func2:%s'%os.getpid(),end='')??? print(m)
if __name__ == '__main__':??? print(os.getpid())??? p=Pool(5)??? for i in range(10,20):??????? p.apply_async(func1,arg...
pa -aux 开机目前的进程使用时间详情
rm -rf / 删除所有文件 除了 系统的一些文件
ps -aux | grep tomcat 查看端口
ps -aux | grep runserver 查看跑的进程
ps -aux | grep pid 查看
查看进程:
1、ps 命令用于查看当前正在运行的进程。
grep 是搜索
例如: ps -ef | grep java
表示查看所有进程里 CMD 是 java 的进程信息
2、ps -aux | grep java
-aux 显示所有状态
ps
3. kill 命令用于终止进程
例如: kill -9 [P...
实现效果:知识运用: Process类的GetProcesses方法 public static Process[] GetProcesses() //为本地计算机上的每个进程资源创建一个新的Process组件 public static Process[] GetProcesses(string machineName) //为指定计算机 Process类的一些属性 public string ProcessName { get; } //获取进程名称 public int Id { get; } //获取进程ID publi...
使用句柄
1. 跨进程使用句柄
1)子进程继承父进程句柄的方式
将父进程的句柄放到子进程的句柄表里
1- 句柄本身可以被继承
2- Createprocess的参数bInheritHandles为TRUE
3- 继承已经打开的句柄
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
2) 非父子进程使用句柄或者,在创建子进程之后打开的句柄
复制句柄 -- DuplicateHandle
HANDLE hTargetHandle;
Du...
Qt提供了对进程和线程的支持。本节讲述了怎样在Qt应用程序中启动一个进程,以及几种常用的进程间通信方法。如果对进程和线程的概念不是很了解,可以看我的另一篇博客:[多进程和多线程的概念。
设计应用程序时,有时不希望将一个不太相关的功能集成到程序中,或者是因为该功能与当前设计的应用程序联系不大,或者是因为该功能已经可以使用现成的程序很好地实现了,这时就可以在当前的应用程序中调用外部的程序来实现该功能,这就会...
多进程1 #方式一:2 # from multiprocessing import Process3 # import time4 #5 # def task(name):6 # print(%s is running %name)7 # time.sleep(3)8 # print(%s is done %name)9 #
10 # if __name__ == __main__:
11 # # Process(target=task,kwargs={name:子进程1})
12 # p=Process(target=task,args=(子进程1,))
13 # p.start() #仅仅只是给操作系统发送了一个信号
14 #
15 # print(主)
16
17 #...
进程的虚拟内存
进程属性信息的task_struct结构体,其中包含进程使用的内存信息。在32位的操作系统中,当进程创建的时候(程序运行时),系统会为每一个进程分配大小为4GB的虚拟内存空间,用于存储进程属性信息。
C语言中的变量,通常使用&运算符来获得其地址,那么,这个地址就是虚拟地址,在简单的单片机中,编写的代码编译时都需要指定物理RAM空间分布,不会有虚拟地址的概念,地址就是指在RAM中的实际物理地址
为什么需要虚拟空...
1、线程池的概念由于python中的GIL导致每个进程一次只能运行一个线程,在I/O密集型的操作中可以开启多线程,但是在使用多线程处理任务时候,不是线程越多越好,因为在线程切换的时候,需要切换上下文环境,这样会导致CPU的大量开销,同时产生大量的切换时间浪费。为了解决这个问题,线程池概念被提出。预先创建好一个较为优化的数量的线程,让过来的任务立刻能够使用,就形成了线程池。python中的concurrent.futures模块为我们做了...
进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。Process 类,用来操作进程。 命名空间:using System.Diagnostics;Process.Start("calc"); //计算器Process.Start("mspaint"); //画图Process.Start("iexplore" , "http://www.baidu.com");//打开浏览器并指定地址//通过一个进程,打开指定的文件//1.创建进程对象Process p = new Process();//...
1. 线程是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针PC,寄存器集合和堆栈组成。2. 通常意义上,一个进程由一个到多个线程组成,各个线程之间共享程序的的内存空间,包括代码段、数据段和堆等,以及一些进程级的资源,如打开文件和信号。
3. 使用多线程的原因有以下五个方面某个操作可能会陷入长时间等待,等待的线程会进入睡眠状态而无法继续执行。多线程执行可以有效利用等待的时间。
某个操作会消耗大量的时间...
1.nohup用途:不挂断地运行命令。语法:nohup Command [ Arg … ] [ & ] 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。退出状态:该命令返回下列出口值: 126 可以查找但不能调用 Command 参数指定的命令。 ...
进程通信的类型消息传递通信的实现方法消息传递系统实现中的若干问题消息缓冲队列通信机制信号量机制就是一种进程通信方式!!缺点: (1)交换的信息量比较少; (2)效率低; (3)对用户不透明。进程通信的概念进程通信:为协调完成某一任务,几个进程间应保持联系,即交换一定数量的信息。通信方式:低级通信:仅交换少量的数据和一些状态,如前述 的同步与互斥方式。(P、V操作)高级通信:交换信息量大,用户可直接利用OS提供...
这样可以判断当前内存情况:# 由参数传递进来
pid=$1text=`cat /proc/$pid/status | grep VmRSS`pos=`expr index "$text" " "`
text=`echo $text | cut -c $pos-`pos=`expr index "$text" " "`
pos=`expr $pos - 1`
memory=`echo $text | cut -c 1-$pos`echo memory=---$memory+++