专栏首页GitHub专栏Linux 进程总结

Linux 进程总结

作 者:For_zwb 链 接: https://blog.csdn.net/weixin_42250655/article/details/81567643

进程

进程,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。它的执行需要系统分配资源创建实体之后,才能进行。举个例子:我们所写的程序,在运行的时候它也是一个进程。

进程和程序的区别:

程序相当于是一个文件,是有序代码的集合,是静态的存储在硬盘中。而进程是运行中的程序,系统会为变量分配相应的内存和初始化它们的值,还有一些资源如:堆、栈等当程序运行完进程也就结束了,但程序还是保存在硬盘中没有消失。

进程的特性

  • 并发性:可以与其它进程在宏观上同时向前推进。
  • 动态性:进程是执行中的程序,动态产生、动态消亡、动态变化。
  • 独立性:进程是系统资源分配的基本单位。
  • 交往性:与其它进程可以进行交互。
  • 异步性:不统一推进。
  • 结构性:每个进程有一个控制块PCB。
  • 并行性:只有在多CPU多处理器的计算机上,进程才能并行执行。

一个进程中如何创建多个进程

创建进程有两种方式:一种是操作系统创建,另一种是父进程创建。父进程创建的进程(通常称为子进程),它们和父进程存在隶属关系。子进程又可以创建进程,这样形成一个进程家族。子进程可以继承其父进程几乎所有的资源。

孤儿进程

孤儿字面意思就是没有父母的孩子,那孤儿进程的意思就是没有父进程的进程。这种情况是怎么发生的呢?就是父进程先于子进程结束,这时子进程被init进程收养,init的进程号为1。

僵尸进程

当一个子进程终止时,如果它的父进程还在运行,内核会为这个终止的子进程保留一定量的信息。父进程可以根据这些信息知道子进程的情况。直到父进程对其进行了善后处理,子进程才会完全终止。在这期间,父进程没有回收子进程并释放子进程占用的资源,这个子进程会成为僵尸进程,它仍然占用一定资源。

进程终止

  • 从main函数返回 return()。
  • 调用 exit()。
  • 调用 _exit()或 _Exit()。
  • 最后一个线程从其启动例程返回。
  • 最后一个线程调用 pthread_exit()。
  • 调用 abort()它产生 SIGABRT 信号。
  • 收到一个信号并终止。
  • 最后一个线程对取消请求作出相应。

进程组

每个进程都属于某个进程组。进程组是一个或多个进程的集合。通常它们与同一作业相关联,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都有一个组长进程,进程ID等于进程组ID的进程就是组长进程。

会话

会话(session)是一个或多个进程组的集合。

竞态条件

当多个进程都企图对共享数据进行某种处理时,而最后的结果又取决于进程运行的顺序时,我们认为发生了竞态条件(race condition)。如果fork之后的某种逻辑显式或隐式地依赖于在fork之后是父进程先运行还是子进程先运行,那么fork函数就会是竞争条件活跃的滋生地。通常,我们都是不可以预估子进程和父进程哪个先运行。因为进程的运行顺序完全取决于内核的调度算法和系统的负载。

我们可以调用wait或者waitpid函数来让父进程等待子进程运行完之后在运行,这样父进程就会被阻塞住,直到子进程运行完毕之后才能运行,其实这样做的效率就比较低,我们fork就是希望多进程并发的执行,如果采用此方法,则fork也就失去了很大的意义。

为了避免竞争条件和不采用wait或waitpid方法,我们可以在多进程之间采用发送和接收信号的处理方法来避免竞态条件。或者各种进程间的通信方式(IPC)也可以使用。

本文分享自微信公众号 - 杰哥的IT之旅(Jake_Internet),作者:For_zwb

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在后台运行Linux命令?

    通常情况下,在 Linux 终端中运行命令时,我们必须等前一命令执行完成后,在输入并执行后一条命令,称之为在前台或前台进程中运行命令,进程在前台运行时,将占用您...

    杰哥的IT之旅
  • 我因撤回了一条微信消息,晚上回家居然跪键盘了。

    我们平时最常用的社交软件:微信和QQ,大家肯定都不陌生,恰恰有时候只因为手抖或者发错人了,却已超出规定的时间范围而不可撤回了。

    杰哥的IT之旅
  • GitHub 热榜:轻量级无 Agent 的自动化运维平台!

    作为一名运维工程师,大家都知道。早在几年前,偏传统运维,以 cacti、nagios 为主流,到后来的 zabbix、Prometheus、Open-Falco...

    杰哥的IT之旅
  • 浅谈3A和进程

    3计帐(Accounting):记录用户对各种网络服务的用量,并提供给计费系统。整个系统在网络管理与安全问题中十分有效。

    py3study
  • 1.进程管理

    11、对进程的描述错误的是( d) A.进程是动态的概念 B.进程执行需要处理机 C.进程是有生命期的 D.进程是指令的集合

    见贤思齊
  • [linux] C语言Linux系统编程进程基本概念

    1.如果说文件是unix系统最重要的抽象概念,那么进程仅次于文件。进程是执行中的目标代码:活动的、生存的、运行的程序。

    陶士涵
  • Linux并发(进程的生老病死)

    Linux中的进程有生老病死,就跟人一样,我们尤其关注其死,因为进程死后如果不处理,它会变成僵尸!

    用户2617681
  • 孤儿进程和僵尸进程

    我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进...

    武军超
  • 进程知多少?

    1 进程为什么出现?2 进程的组成3 如何竞争资源(调度算法)3.1 FCFS3.2 RR3.3 SPN3.4 SRT3.5 HRRN3.6 FB4 进程状态4...

    LieBrother
  • Linux僵尸进程

    版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.ne...

    zy010101

扫码关注云+社区

领取腾讯云代金券