精华内容
下载资源
问答
  • 一个进程是什么
    千次阅读 多人点赞
    2019-05-08 15:29:26

       fork()函数用于从一个已经存在的进程内创建一个新的进程,新的进程称为“子进程”,相应地称创建子进程的进程为“父进程”。使用fork()函数得到的子进程是父进程的复制品,子进程完全复制了父进程的资源,包括进程上下文、代码区、数据区、堆区、栈区、内存信息、打开文件的文件描述符、信号处理函数、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等信息,而子进程与父进程的区别有进程号、资源使用情况和计时器等。

    在别的文章中fork一个子进程是进程的专业术语,意思如上. 

    他喵的专业人士就是不一样,说个话都得查百度.(这句话原创).

    原文

    更多相关内容
  • 1. 什么是进程和线程 现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统。 1.1 百科解释 进程(Process)是计算机中的程序关于某数据集合上的次运行活动,是系统进行资源分配和...

    1. 什么是进程和线程

    现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统。

    1.1 百科解释

    进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。

    线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

    1.2 简单理解

    线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。

    一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。

    进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。

    线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

    1.3 总结

    进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。

    线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。是程序执行的最小单位。

    2. 具体理解

    在Linux环境下,每个进程有自己各自独立的 4G 地址空间,大家互不干扰对方,如果两个进程之间通信的话,还需要借助第三方进程间通信工具 IPC 才能完成。不同的进程通过页表映射,映射到物理内存上各自独立的存储空间,在操作系统的调度下,分别轮流占用CPU去运行,互不干扰、互不影响,甚至相互都不知道对方。在每个进程的眼里,CPU就是他的整个世界,虽然不停地被睡眠,但是一旦恢复运行,一觉醒来,仿佛什么都没发生过一样,认为自己拥有整个CPU,一直在占有它。

    在一个进程中,可能存在多个线程,每个线程类似于合租的每个租客,除了自己的私有空间外,还跟其它线程共享进程的很多资源,如地址空间、全局数据、代码段、打开的文件等等。在线程中,通过各种加锁解锁的同步机制,一样可以用来防止多个线程访问共享资源产生冲突,比如互斥锁、条件变量、读写锁等。

    进程具有的特征:

    • 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
    • 并发性:任何进程都可以同其他进行一起并发执行;
    • 独立性:进程是系统进行资源分配和调度的一个独立单位;
    • 结构性:进程由程序,数据和进程控制块三部分组成

    对于操作系统来说,它可以同时运行多个任务。你可以一边听歌,一边打游戏,一边还等着QQ开着语音聊着天,这就是多任务,至少同时有3个任务正在运行。还有很多任务悄悄地在后台同时运行着,只是桌面上没有显示而已。对于过去的单核CPU,也可以完成这些任务,由于CPU执行代码都是顺序执行的,那么,单核CPU就轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。

    真正的并行执行多任务只能在多核CPU上实现,但是,由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行。

    对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。

    有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。

    由于每个进程至少要干一件事,所以,一个进程至少有一个线程。当然,像Word这种复杂的进程可以有多个线程,多个线程可以同时执行,多线程的执行方式和多进程是一样的,也是由操作系统在多个线程之间快速切换,让每个线程都短暂地交替运行,看起来就像同时执行一样。当然,真正地同时执行多线程需要多核CPU才可能实现。

    3. 为什么使用多线程?

      ①  和进程相比,它是一种非常“节俭”的多任务操作方式。在Linux系统中,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护其代码段、堆栈段和数据段,这种多任务工作方式的代价非常“昂贵”。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且线程间彼此切换所需要时间也远远小于进程间切换所需要的时间。

       ②  线程间方便的通信机制。对不同进程来说它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行。这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其他线程所用,不仅方便,而且快捷。

    4. 进程和线程的区别

    第一:什么是进程,什么是线程?

    • 进程是程序一次执行的过程,动态的,进程切换时系统开销大
    • 线程是轻量级进程,切换效率高

    第二:进程和线程的空间分配?

    • 进程:每个进程都有独立的0-3G的空间,都参与内核调度,互不影响
    • 线程:同一进程中的线程共享相同的地址空间(共享0-3G)

    第三:进程之间和线程之间各自的通信方式

    • 进程间:(7种)无名管道、有名管道、信号机制、信号灯、共享内存、消息队列、套接字socket
    • 线程间:全局变量,信号量,互斥锁
    展开全文
  • 什么是僵尸进程与孤儿进程

    千次阅读 多人点赞 2021-10-12 03:52:47
    一个进程调用 exit 命令结束自己的生命时,其实它并没有真正的被销毁,内核只是释放了该进程的所有资源,包括打开的文件、占用的内存等,但是留下一个称为僵尸进程的数据结构,这个结构保留了一定的信息(包括进程...

    1、什么是僵尸进程和孤儿进程:

            在 Unix/Linux 系统中,正常情况下,子进程是通过父进程创建的,且两者的运行是相互独立的,父进程永远无法预测子进程到底什么时候结束。当一个进程调用 exit 命令结束自己的生命时,其实它并没有真正的被销毁,内核只是释放了该进程的所有资源,包括打开的文件、占用的内存等,但是留下一个称为僵尸进程的数据结构,这个结构保留了一定的信息(包括进程号 the process ID,退出状态,运行时间),这些信息直到父进程通过 wait()/waitpid() 来取时才释放。这样设计的目的主要是保证只要父进程想知道子进程结束时的状态信息,就可以得到

    • 僵尸进程:一个进程使用 fork 创建子进程,如果子进程退出,而父进程并没有调用 wait 或 waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵死进程。

    • 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被 init 进程(进程号为1)所收养,并由 init 进程对它们完成状态收集工作。

    2、僵尸进程与孤儿进程的问题危害:

            僵尸进程虽然不占有任何内存空间,但如果父进程不调用 wait() / waitpid() 的话,那么保留的信息就不会释放,其进程号就会一直被占用,而系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程,此即为僵尸进程的危害。

            孤儿进程是没有父进程的进程,孤儿进程这个重任就落到了 init 进程身上,init 进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init,而 init 进程会循环地 wait() 它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init 进程就会出面处理它的一切善后工作。因此孤儿进程并不会有什么危害。

    如果子进程在 exit() 之后,父进程没有来得及处理,这时用 ps 命令就能看到子进程的状态是“Z”。如果父进程能及时处理,可能用 ps 命令就来不及看到子进程的僵尸状态,但这并不等于子进程不经过僵尸状态。 如果父进程在子进程结束之前退出,则子进程将由 init 接管。init 将会以父进程的身份对僵尸状态的子进程进行处理。

    3、如果解决僵尸进程造成的问题:

    (1)方案一:父进程通过 wait 和 waitpid 等函数等待子进程结束,但这会导致父进程挂起,所以这并不是一个好办法,父进程如果不能和子进程并发执行的话,那我们创建子进程的意义就没有。同时一个 wait 只能解决一个子进程,如果有多个子进程就要用到多个 wait

    (2)方案二:通过信号机制:

            子进程退出时,向父进程发送 SIGCHILD 信号,父进程处理 SIGCHILD 信号,在信号处理函数中调用 wait 进行处理僵尸进程。

    (3)方案三:fork两次:

            原理是将进程成为孤儿进程,从而其的父进程变为 init 进程,通过 init 进程处理僵尸进程。具体操作为:父进程一次 fork() 后产生一个子进程随后立即执行 wait(NULL) 来等待子进程结束,然后子进程 fork() 后产生孙子进程随后立即exit(0)。这样子进程顺利终止(父进程仅仅给子进程收尸,并不需要子进程的返回值),然后父进程继续执行。这时的孙子进程由于失去了它的父进程(即是父进程的子进程),将被转交给Init进程托管。于是父进程与孙子进程无继承关系了,它们的父进程均为Init,Init进程在其子进程结束时会自动收尸,这样也就不会产生僵死进程了

    (4)方案四:kill 父进程:

            严格地来说,僵死进程并不是问题的根源,罪魁祸首是产生出大量僵死进程的那个父进程。因此,当我们寻求如何消灭系统中大量的僵死进程时,答案就是把产生大量僵死进程的那个元凶枪毙掉(也就是通过 kill 发送 SIGTERM 或者 SIGKILL 信号啦)。枪毙了元凶进程之后,它产生的僵死进程就变成了孤儿进 程,这些孤儿进程会被 init 进程接管,init 进程会 wait() 这些孤儿进程,释放它们占用的系统进程表中的资源,这样,这些已经僵死的孤儿进程就能瞑目而去了。

    参考文章:

    https://www.cnblogs.com/Anker/p/3271773.html

    https://www.cnblogs.com/jian-99/p/7739369.html

    展开全文
  • 什么是进程什么是线程?什么是协程? 进程是什么? 进程(Process)是计算机中的程序关于某数据集合上的次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机...

    什么是进程?什么是线程?什么是协程?

    进程是什么?

    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

    狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。

    广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

    进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。

    直白地讲,进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。

    进程拥有代码和打开的文件资源、数据资源、独立的内存空间。

    线程是什么?

    线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

    线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows7的线程,进行混合调度。

    同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

    一个进程可以有很多线程,每条线程并行执行不同的任务。

    在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责I/O处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。

    线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。

    线程拥有自己的栈空间。

    协程是什么?

    协程,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。

    一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程。我们知道多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。

    最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

    展开全文
  • 什么是进程

    万次阅读 多人点赞 2018-03-25 12:10:57
    程序:完成特定任务的一系列指令集合   代码段+数据段  -----放在磁盘中的程序  进程:进行就是正在进行中的程序  1、用户角度: 进程是程序的一次动态执行过程 ...CPU一次只能处理一个程...
  • 什么是进程? ( 进程的详细概念 )

    万次阅读 多人点赞 2017-12-09 15:19:46
    进程管理是操作系统重点、难点问题,也是贯穿Linux学习的知识点。那么什么是进程? 为什么引入进程的概念?  从理论角度看,是对正在运行的程序过程的抽象;...  广义定义:进程一个具有一定独立...
  • 进程虚拟地址为什么是4G大小?

    千次阅读 2018-10-16 21:55:39
    1、创建一个进程时,操作系统会为该进程分配一个 4GB 大小的虚拟 进程地址空间。 之所以是 4GB ,是因为在 32 位的操作系统中,一个指针长度是 4 字节 (32位), 2的32次 方个地址寻址能力是从 0x00000000~0...
  • 什么是守护进程?

    千次阅读 2019-12-11 11:33:42
    1.守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并 且周期性地执行某种任务或等待处理某些发生的事件。 Linux系统启动时会启动很多系统服务...这种进程一个名称叫守护进程(Daem...
  • 参考链接:怎么让一个进程在退出终端后继续运行 daemon进程简介 如何判断一个进程是否为daemon进程 关于后台运行进程 什么是linux的daemon进程? daemon进程又称为守护 进程,是在系统 启动就运行,系统关闭才...
  • 一个应用程序有多少个进程

    千次阅读 2019-12-16 21:55:42
    一个程序几个进程在于这个程序的开发者的设置,可以是1个,也可以是多个的。...2.一个程序只有一个进程但被开启很多个 启动多个同一应用程序,每个应用程序都是单进程。这个场景有些应用程序会禁用掉,有些是可以的...
  • 如何多个进程监听同一个端口

    千次阅读 2020-06-03 11:13:52
    一个进程监听端口,经验告诉我们,如果多次启动一个进程会报错:“Address already in use!"。这是由于bind函数导致的,由于该端口号已经被第一个进程监听了。有哪些方法可以实现多个进程监听同一个端口呢? 2. ...
  • 什么是线程?什么是进程

    千次阅读 多人点赞 2018-08-28 11:05:57
    一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。 进程之间的通信 进程间通信 IPC(管道,信号量,共享内存,消息队列)。 二、线程 线程是进程的一个实体,是进程的一条执行路径。 线程是CPU...
  • 如何在linux中关闭一个进程

    万次阅读 2021-09-15 10:43:35
    如何在linux中kill一个进程 刚开始学习Linux的时候,总是直接点击×来关闭程序。虽然知道这是关闭整个终端程序,但是奈何如此简单的事情对于新手来说都是很困难的。???? 在 Linux 里中止程序 后来知道,在linux中...
  • Android多进程实现,一个APP多个进程

    千次阅读 2019-07-30 10:03:06
    相关文章: Android IPC机制(一)开启多进程(文章1:刘望舒大神的文章,1.3w阅读量,20赞) Android IPC机制(二)用Messenger进行...Android中,默认一个APK包就对应一个进程。 Android平台对每个进程有内存限...
  • 个进程同时访问同一个文件

    万次阅读 2019-04-08 09:06:06
    对于多个进程打开同一文件的情况,每个进程都有它自己的文件表项(file对象),其中有它自己的文件位移量,所以对于多个进程读同一文件都能正确工作。但是,当多个进程写同一文件时,则可能产生预期不到的结果。...
  • 一个CPU就可以同时运行多个进程

    千次阅读 2020-07-06 20:56:33
  • 网络-一个进程是否能拥有多个端口

    万次阅读 2019-03-05 09:26:36
    1.端口理解 其它网友的观点 ... 博文中打的比喻个人觉得很形象,特此引用一下。...其它网友也有相同的问题,大部分人认为一个进程可以拥有多个端口。 端口 下面是引用别人博客的话,同样觉得挺形象。socke...
  • Java中main方法启动的是一个线程也是一个进程,一个java程序启动后它就是一个进程,进程相当于一个空盒,它只提供资源装载的空间,具体的调度并不是由进程来完成的,而是由线程来完成的。一个java程序从main开始之后...
  • 程序和进程的区别是什么

    千次阅读 2021-06-30 16:02:54
    程序是静态的,进程是动态的:程序是存储在某种介质上的二进制代码,进程对应了程序的执行过程,系统不需要为一个不执行的程序创建进程,一旦进程被创建,就处于不断变化的动态过程中,对应了一个不断变化的上下文...
  • 系统调用是什么? 简单来说,系统调用是接口,它把应用程序的请求传给内核,调用相应的内核函数完成所需的处理,再将处理结果返回给应用程序。 fork()是什么?...如果出现错误, fork返回一个负值; ...
  • 一个进程的线程在另一个进程内是不可见的。(b) 在引入线程的操作系统中,进程是资源分配和调度的单位,线程是处理机调度和分配的单位,资源是分配给进程的,线程只拥有很少资源,因而切换代价比进程切换低。
  • 什么是多任务?什么叫做进程什么是线程?

    千次阅读 多人点赞 2017-01-24 09:27:57
    1、什么叫做多任务? IT系统,同时完成多项任务处理,这个同时指的是同一段...当多任务操作系统使用某种任务调度策略允许两个或更多进程并发共享一个处理器时,事实上处理器在某一时刻只会给一件任务提供服务。因为
  • 一个进程创建多个子进程

    万次阅读 2018-08-07 20:59:49
    循环方式 #include #include #include #include ...#define child 10 ...int main(int argc, char const *argv[]) ... ++i)//创建子进程个数 ... //如果在此位置,就是一个进程创建多个子进程 } }  
  • linux查看某一个进程的socket连接数

    千次阅读 2019-07-23 11:47:06
    ls /proc/18709/fd -l | grep socket: | wc -l 18709是进程ID 可以通过 ps aux | grep 进程名称 来获取到
  • wsappx是什么进程,可以关掉吗

    万次阅读 2022-03-17 10:05:39
    有一些用户在使用windows10系统过程中,发现了一个陌生的wsappx.exe进程。就想问wsappx是什么进程?这个进程可以关掉吗?我们一起来看看吧!  wsappx是什么进程  我们在wsappx运行时,打开任务管理器,将其展开...
  • 一个进程无法直接访问另一个进程的变量和数据结构, 如果希望让一个进程访问另一个进程的资源,需要使用进程间通信,比如:管道,文件, 套接字等。一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。 ...
  • 由于程序的需要,我们需要在台服务器上启动多相似的子进程,如何做呢? 有两种可以尝试一下: 1.循环创建: #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <...
  • 【操作系统】第六话·线程是进程的(宝ᴗ宝)嘛?

    千次阅读 多人点赞 2022-03-12 15:23:07
    从今天开始,我们将要开启一个新的系列【闪耀计划】,没错!这是今年上半年的一整个系列计划!本专题目的是通过百天刷题计划,通过题目和知识点串联的方式,完成对计算机操作系统的复习和巩固;同时还配有专门的笔记...
  • 单个进程监听多个端口单个进程创建多个 socket 绑定不同的端口,TCP, UDP 都行多个进程监听同一个端口(multiple processes listen on same port)方式1:通过 fork 创建子进程的方式可以实现,其他情况下不行。...
  • 人都知道 PID,究竟什么是 PID?为什么你想要 PID?你打算用 PID 做什么?你脑子里有同样的问题吗?如果是这样,你就找对地方了解这些细节了。• 来源:linux.cn• 作者:Magesh Maruthamuthu• 译者:geekpi •...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,636,908
精华内容 1,054,763
关键字:

一个进程是什么