8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

使用 fork() 函数派生出多个子进程来并行执行程序的不同代码块,是一种常用的编程泛型。但是,在使用 fork() 函数时若处理不当,很容易产生僵尸进程。

fork()#include

#include

int main(int argc, char **argv) {

while (1) {

pid_t pid = fork();

if (pid > 0) {

// 主进程

sleep(5);

} else if (pid == 0) {

// 子进程

return 0;

} else {

fprintf(stderr, "fork errorn");

return 2;

}

}

}

该函数的返回值有三种情况,分别是:大于 0,表示当前进程为父进程,返回值是子进程号;

等于 0,表示当前进程是子进程;

小于 0(确切地说是等于 -1),表示 fork() 调用失败。

示例代码每 5 秒创建一个子进程,而且没有等待回收,变成僵尸进程$ gcc test.c -o fork

$ ./fork

kk 24336 17551 0 11:16 pts/6 00:00:00 ./fork

kk 24337 24336 0 11:16 pts/6 00:00:00 [fork]

kk 24340 24336 0 11:16 pts/6 00:00:00 [fork]

kk 24345 24336 0 11:16 pts/6 00:00:00 [fork]

僵尸进程

僵尸进程是指子进程退出后,它的父进程没有“等待”该子进程,这样的子进程就会成为僵尸进程。

一般父进程需要调用 wait 或 waitpid 来等待子进程进行回收

wait

waitpid

SIGCHLD

在 SIGCHLD 中调用 wait 或 waitpid

SIG_IGN

除了在 SIGCHLD 信号处理函数中调用 wait() 来避免产生僵尸进程,我们还可以选择忽略 SIGCHLD 信号,告知操作系统父进程不关心子进程的退出状态,可以直接清理。signal(SIGCHLD, SIG_IGN);

但需要注意的是,在部分 BSD 系统中,这种做法仍会产生僵尸进程。因此更为通用的方法还是使用 wait() 函数。

需要区分僵尸进程和孤儿进程

Ref

Linux 父进程 子进程 回收,回收 fork() 的子进程相关推荐

  1. Linux进程全解4——fork创建子进程

    以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 1.为什么要创建子进程? (1)每一次程序的运行都需要一个进程: (2)多进程实现宏观上的并行. 2.fork的内 ...

  2. Linux中父进程为何要苦苦地知道子进程的死亡原因?

    白发人送黑发人 一个普遍的常识是,在Linux里面总是"白发人送黑发人",子进程死亡,父进程透过wait()等待子进程死亡,并清理子进程僵尸,当然父进程也可以因此而获得子进程的死亡 ...

  3. linux父进程发出退出信号,为什么prctl没有如小弟我所预期的设置一个父进程退出发给子进程信号...

    为什么prctl没有如我所预期的设置一个父进程退出发给子进程信号? 我写了一个小程序,在fork出的子进程中使用prctl,设置父进程退出后自动发送给子进程退出信号. #include #includ ...

  4. Linux进程全解7——父进程wait / waitip回收子进程

    以下内容源于朱有鹏<物联网大讲堂>的课程学习整理,如有侵权,请告知删除. 一.wait介绍 1.wait的工作原理 (1)子进程结束时,系统向其父进程发送SIGCHILD信号: (2)父进 ...

  5. linux父进程循环,LINUX C 父进程建立多个子进程循环非堵塞回收列子

    下面 代码主要用于复习,留于此 点击(此处)折叠或打开 /*********************************************************************** ...

  6. linux父进程中显示子进程pid,请教linux下c语言函数fork父进程打印子进程的PID

    请教linux下c语言函数fork父进程打印子进程的PID 关注:296  答案:2  信息版本:手机版 解决时间 2019-01-14 04:55 雨不眠的下 2019-01-13 12:23 用于 ...

  7. Linux父进程如何发信号给子进程,在父进程和子进程之间发送信号

    我正试图从parrent进程向子进程发送一个用户定义的(SIGUSR1或SIGUSR2)信号.子进程接收到信号后,会等待5秒钟,并将另一个用户定义的信号发送给parrent进程.当parrent进程接 ...

  8. linux创建10个子进程,linux父进程创建两个子进程

    #include"stdio.h" #include"stdlib.h" //exit包含在stdlib.h头文件中 #include"unistd. ...

  9. linux父进程和子进程查看,linux查看父子进程

    python多进程代码 test.py #coding=utf-8 import multiprocessing import time def func(msg): print "msg: ...

最新文章

  1. Alpha 测试和Beta的区别
  2. Java8-Stream 概括
  3. java代码解锁华为_如何编写可怕的Java代码?
  4. Java实现获取HDFS子目录数量_Java实现读取HDFS目录
  5. 北漂鱼引导页HTML源码
  6. 二次函数计算机课件,《二次函数的应用》课件
  7. read一个收到RST的socket会返回0?
  8. 计算机组成原理(唐朔飞)--第一篇 概论
  9. 最新短视频去水印小程序源码/带流量主/外卖CPS系统/批量解析/修改MD5
  10. toolchain安装教程支持_网上现成toolchain安装操作
  11. 【BZOJ】4668 冷战
  12. 个人如何办理注册商标
  13. php数据库内容在漂亮表格呈现
  14. Python 解压rar类型文件
  15. python中Pandas之DataFrame索引、选取数据
  16. ALBRECHT铣刀夹头BT50 20-32
  17. 疫情下的长租公寓:蛋壳们的“生死考”
  18. 用Javascript开发《三国志曹操传》-开源讲座(四)-用地图块拼成大地图
  19. js简单判断页面是否为手机端访问
  20. 【Redis】--缓存双写一致性分析、解决方案

热门文章

  1. deepin 安装 kvm-manager
  2. 143. 最大异或对【贪心 trie】
  3. 项目: 推箱子游戏【c/c++】
  4. 【PAT乙级】1059 C语言竞赛 (20 分)
  5. 接口自动化-发送get请求-1
  6. python中uss的用法_使用不同内存ussag管理Python多进程进程进程
  7. 表名含有后缀 mysql 怎么删除_mysql批量删除指定前缀或后缀表
  8. 【PAT】A1060 Are They Equal *
  9. Java 高频面试题:聊一聊 JUC 下的 LinkedBlockingQueue
  10. Lombok 介绍和使用详情