linux中的进程和线程
应用程序:可以被操作系统执行的一组指令和参数的集合,是静态的,并存储在磁盘空间中;
进程:在操作系统中在运行程序后,处于运行状态的程序,是应用程序的一个执行过程,同时也是操作系统分配内存,cpu等系统资源的基本单位;
线程:进程中可以共享进程资源的一个执行单位;
一个应用程序可以对应多个进程,一个进程中可以有多个执行线程;
系统操作进程的方式主要是:创建进程,终止进程,已经控制进程间的通信和同步;
进程的创建过程:
1. 复制父进程的环境配置;
2. 在内核中建立进程结构;
3. 将创建好的进程结构放入到进程列表中;
4. 系统分配资源给此进程;
5. 复制父进程的内存映射信息;
6. 管理文件描述符和连接点;
7. 通知父进程;
进程的终止方式:
1. 从main函数返回;
2. 调用exit或者_exit函数;
3. 调用abort函数;
4. 被信号终止;
进程在终止时,系统会释放进程拥有的资源,包括内存,内核结构等。
进程间的通信方式:
1. 管道:内核为两个进程建立的通信通道,一端只能写数据,一个端只能读数据,完成通信;
2. 共享内存:多个进程共享一段内存,并对内存进行操作来完成通信;
3. 消息队列:内核中的一个链表,发送方进程将消息发送到内核中,内核将消息放入链表,等待接收方进程发送请求消息,收到请求消息后,内核将消息从链表上取下,交给接收方,完成通信,此过长完全是异步的;
4. 信号量:一个共享的数值,主要用于进程间的同步和对共享资源的保护;
进程和线程:
线程是进程的一个执行单位,属于进程的一部分;
进程是操作系统分配资源的基本单位,系统只为线程分配cpu资源,其他系统资源只能共享进程的系统资源,线程是执行的基本单位;
系统通过进程控制表PCB调度线程,并通过线程控制表TCB对线程进行调度;
linux中的进程和线程的更多相关文章
- Linux中的进程与线程
介绍了Linux下fork()创建进程以及使用pthread_create()创建线程的方法 1. 基于进程的斐波那契数列 在下面的代码中,由子进程进行斐波那契数列的输出,父进程要等待子进程输出完毕, ...
- Java中的进程与线程(总结篇)
详细文档: Java中的进程与线程.rar 474KB 1/7/2017 6:21:15 PM 概述: 几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进 ...
- liunx中的进程与线程
1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作(比如,创建,销毁等)都是有内核来实现的. Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程 ...
- Linux中查看进程的多线程pstree, ps -L
Linux中查看进程的多线程 在SMP系统中,我们的应用程序经常使用多线程的技术,那么在Linux中如何查看某个进程的多个线程呢? 本文介绍3种命令来查看Linux系统中的线程(LWP)的情况:在我的 ...
- Linux下的进程与线程(二)—— 信号
Linux进程之间的通信: 本文主要讨论信号问题. 在Linux下的进程与线程(一)中提到,调度器可以用中断的方式调度进程. 然而,进程是怎么知道自己需要被调度了呢?是内核通过向进程发送信号,进程才得 ...
- windows中的进程和线程
今天咱们就聊聊windows中的进程和线程 2016-09-30 在讨论windows下的进程和线程时,我们先回顾下通用操作系统的进程和线程.之所以称之为通用是因为一贯的本科或者其他教材都是这么说的: ...
- Java中的进程和线程
Java中的进程与线程 一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是 ...
- python中的进程、线程(threading、multiprocessing、Queue、subprocess)
Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...
- 如何在 Linux 中查看进程占用的端口号【转】
对于 Linux 系统管理员来说,清楚某个服务是否正确地绑定或监听某个端口,是至关重要的.如果你需要处理端口相关的问题,这篇文章可能会对你有用. 端口是 Linux 系统上特定进程之间逻辑连接的标识, ...
随机推荐
- zip伪加密文件分析(进阶版)
作者近日偶然获得一misc题,本来以为手到擒来,毕竟这是个大家都讨论烂了的题,详情访问链接http://blog.csdn.net/ETF6996/article/details/51946250.既 ...
- [Thinking in Java]Nothing but Java
1 对象(Double Elephants) 1.1 抽象 万物皆对象.什么东西都可以抽象成属性和方法,达到可重用的目的. 对象之间交流靠发送消息.就是通过调用某个特定对象的方法来达到消息传递的目的. ...
- golang 文件操作
package main import ( "bytes" "fmt" "io" "os" ...
- 【IOS学习】1.IOS框架
1.框架概述 iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa ...
- Linux中MySQL的基本操作
1. 用root用户登录mysql mysql -u root -p 2. 查看database show databases; 3. 查看table use database名 show table ...
- 定义信息源的一些示例(xml文件)
本文目录 1.订阅博客,简单一例 2.从网页获取信息,简单一例 3.充分使用callback回调代码 4.html_re中包含多个block 5.使用html_json这个worker,解析json数 ...
- CMAKE 配置选项
CMake Configuration Options 注: 本文翻译自 dcmtk_wiki: Howto_CMakeConfiguration. DCMTK版本(原文):dcmtk-3.6.0 C ...
- netflix:Conductor微服务编排引擎
项目地址: https://github.com/Netflix/conductor Conductor 是 Netflix 受需要运行全球流媒体业务流程的启发,构建的基于云的微服务编排引擎. Con ...
- linux yum命令详解-转
yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...
- maven3.2.3+eclipse4.4+JDK1.8+win8.1_64bit环境搭建
--------------------------------------- 博文作者:迦壹 博客标题:win8.1_64bit+eclipse4.4+maven3.2.3+JDK1.8环境搭建 博 ...