深入理解Unix进程--读后总结2

1.内核对于子进程会采用看顾模式,这种模式的概念是:一个进程可以衍生出很多子进程,那么该进程要看顾这些子进程,并对其退出做出相应。为了达到这个目的,内核会把每一个退出的子进程的信息依次加到内核队列中,以方便父进程在合适的时机通过Process.wait取回该信息。
所以,如果父进程比子进程先结束,就会造成 看顾 模式失效,从而导致内核中的子进程信息无法被取出,这时候那些子进程就会变成僵尸进程了。

  1. 内核会一直希望父进程调用Process.wait来获取子进程的信息,但是如果父进程先死掉了,或者父进程压根不去调用Process.wait来获取,那么子进程就会变成僵尸进程。
    为了避免子进程变成僵尸进程,我们可以通过Process.detach来分离子进程,这样的话,子进程就和父进程没有关系了,不会变成僵尸进程。
  1. 进程皆可捕获信号,而且信号投递是不可靠的,我们可能在处理一个信号的时候接受不到下一个信号(通常是由于代码有问题)。而且信号可以中断任何代码,包括信号处理代码……
  1. Process.wait会阻塞的等待子进程结束,他还有一个非阻塞的版本,用于捕捉信号,Process.wait(-1,Process::WNOHANG)。当父进程想要捕捉子进程退出的信号的时候,可以使用这个版本。一个忠告是信号处理逻辑一定要放在while循环中进行,这样可以保证我们不错过其他信号。while Process.wait
  1. 任何进程都可以捕捉信号并且给其他的线程发送信号。信号处理是全局的,也就是说一旦进程活着,他就可以捕获信号(感觉捕获信号类似于一个中断,当有信号产生的时候,就跳到捕获信号的代码处去执行了)
  1. 天字第一号进程的pid是1,他没有父进程,当子进程变为僵尸进程的时候,他自动成为这些僵尸进程的父进程
  1. 每个进程都属于一个进程组,每个进程组都有一个组id,进程组一般是父进程和他fork出来的子进程的集合,父进程的pid默认为该组的组id。但是我们可以通过Process.setpgrp(id)来设置某个进程属于哪一个进程组。还有一种进程组的情况是通过管道连接的一组进程,也会属于同一个进程组。
  1. 一般通过shell命令行启动的进程,都会创建一个进程组,比如通过shell启动python,然后在这个python中fork的子进程就都属于这个python进程组的成员。
  1. 通过命令行等终端,按下Ctrl+C等发送的信号,默认是发送给进程组中的所有进程,就上面的情况来说,在终端商按下Ctrl+C会终止python进程和它的子进程

10.会话组可以包含一个或者多个进程组,用户的一次登录就是一个会话组,两个用户登录会有两个会话组。如果会话组有一个命令行终端的话,那么会话组会有一个前台进程组和若干个后台进程组,在命令行终端上按下的Crtl+C等指令,会被发送给该会话组,然后会被转发到该会话组的前台进程组,进而被发送到该前台进程组中的所有进程

  1. 我们知道如果一个子进程先退出,父进程没有调用Process.wait,死去的子进程会变成僵尸进程,直到父进程调用了Process.wait。但是如果父进程先死了,子进程有变成僵尸进程的可能,但是由于这时候子进程自动把Init进程作为自己的父进程,也不一定会变成僵尸进程,此时的状态是孤儿进程。
  1. 守护进程就是完全不和终端交互的进程,也就是说这个进程不能有控制终端,不能成为进程组的领导进程,要达到这个目的有一个一般的步骤

1.fork出一个子进程,同时结束父进程
2.调用setsid,则为该子进程生成新的进程组和会话组。现在这个子进程成为了新进程组的领导进程,并且该子进程所属的会话组没有控制终端
3.子进程再次fork一次,生成孙进程,则该孙进程不属于进程组的领导进程,并且也没有控制终端。
4.重定向三个标准文件描述符到/dev/null
5.这样这个孙进程就是一个完全的守护进程了

  1. 使用exec可以转换进程,比如把一个Java进程转换成Python进程。一般都是fork+exec使用,这样做的好处是,exec转换的进程会保留原来进程所打开的所有资源,包括文件描述符等。
  1. 使用exec传递参数的时候,最好是传递字符数组,而不是字符串,因为我们知道每一个进程都有argv参数,传递字符数组的话会把该数组直接作为ARGV,而传递字符串的话,会启动一个shell来解释该字符串,这样会造成安全问题。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容

  • Linux 进程管理与程序开发 进程是Linux事务管理的基本单元,所有的进程均拥有自己独立的处理环境和系统资源,...
    JamesPeng阅读 2,467评论 1 14
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,125评论 0 23
  • 文/优酷自频道市场总监 许维 哥的朋友圈已经连续几天被papi酱刷屏了,简直是逼我不得不跳出来写点啥。(先悄悄的承...
    头头是道许维阅读 635评论 0 4
  • 总是觉得只有农历新年才叫过年。 此时阖家团圆,幸福满满,人人都洋溢着温暖喜庆。 此时此刻,无论你身处何方,无论你从...
    ld熊壮壮阅读 98评论 0 0
  • 四月的北京处处嫩绿,处处充满生机,记得三年前也是春天的某一日,工作室贺立老师高兴地告诉大家,她发现了一个非常棒的太...
    千岛妈阅读 318评论 0 0