fork() in linux

About fork() in linux:

parent/child processes created by fork() share the same file table (linux
file descriptor or called `open file descriptor`)

Which code will the new process execute?

Acutally they share the same code, the different is the return value of
fork();

for child process, fork() returns zero, but for parent process, the actual

child process id which is non-zero.

Reference:

[1] http://stackoverflow.com/questions/11733481/can-anyone-explain-a-simple-description-regarding-file-descriptor-after-fork

[2] http://man7.org/linux/man-pages/man2/fork.2.html

About select() in linux:

select() and pselect() allow a program to monitor multiple file descriptors,
waiting until one or more of the file descriptors

become "ready" for some class of I/O operation (e.g., input possible). A file
descriptor is considered ready if it is possible

to perform the corresponding I/O operation (e.g., read(2)) without blocking.

My understanding:

In network programing like socket,read,write, there are two kinds of api,
readsync() or readasync(), one will bock if there is no data to read,

another will not block for it will test whether there is data to read. So in
the low level, `select` does this kind of thing!

Reference:

[1] http://linux.die.net/man/2/select

[2] http://stackoverflow.com/questions/14544621/why-is-select-used-in-linux

fork() in linux,布布扣,bubuko.com

时间: 2025-01-04 15:06:07

fork() in linux的相关文章

fork 炸弹----linux

既然我们讨论的都是些奇怪的代码,不妨思考一下这一行: :(){ :|: & };: 对你来说,这可能看起来有些神秘,但是我看来,它就是那个臭名昭著的 Bash fork 炸弹.它会反复启动新的 Bash shell,直到你的系统资源消耗殆尽.系统崩溃. 不应该在最新的 Linux 系统上做这些操作.注意,我说的是不应该.我没有说不能.正确设置用户权限,Linux 系统能够阻止这些破坏性行为.通常用户仅限于分配使用机器可用内存.但是如果作为 root 用户的你运行了这行命令(或者它的变体 Bash

linux下shell脚本执行方法及exec和source命令

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两类:外部命令和内部命令.外部命令是通过系统调用或独立的程序实现的,如sed.awk等等.内部命令是由特殊的文件格式(.def)所实现,如cd.history.exec等等. 在说明exe和source的区别之前,先说明一下fork的概念. fork是linux的系统调用,用来创建子进程(child

linux 安装mongodb

Linux 安装mongodb 1.下载mongodb linux wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.2.6.tgz tar -zxvf mongodb3.2.6.tgz解压 解压后的目录 bsondump mongo mongod mongodump mongoexport mongofiles mongoimport mongooplog mongoperf mongorestore mon

《Linux内核设计与实现》第三章读书笔记

一.进程(任务)描述 1.进程是处于执行期的程序:除了可执行程序代码,还包括打开的文件.挂起的信号.内核内部数据.一个或者多个执行线程等多种资源 线程是在进程活动中的对象:内核调度的对象是线程而不是进程 在Linux系统中,并不区分线程和进程 可能存在两个或者多个进程执行的是同一个程序:甚至N个进程共享打开的文件.地址空间之类的资源 2.在现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存 同一进程中的线程之间可以共享虚拟内存,但是每个都拥有自己的虚拟存储器 3.进程概述 新创建的进程调

学习Linux笔记(六)--进程操作

进程调度与管理: 进程是操作系统中程序资源的基本组织单位,包括程序资源,数据内存及地址空间,以及其他资源,线程是程序执行的基本单位,也是cpu调度的控制单位(轻量级的进程:进程有独立的地址空间,线程没有,空间出错就会导致蓝屏:线程不能独立存在,它是由进程创建(fork,linux下),Thread:相对讲,线程耗费的cpu,和内存小于进程). 进程查看: #pa -a(查看所有进程) #ps -u(以用户信息查看) #ps -x(查看后台进程参数) #ps -aux(查看最多,信息最全)| mo

谨慎使用多线程中的fork

前言 在单核时代,大家所编写的程序都是单进程/单线程程序.随着计算机硬件技术的发展,进入了多核时代后,为了降低响应时间,重复充分利用多核cpu的资源,使用多进程编程的手段逐渐被人们接受和掌握.然而因为创建一个进程代价比较大,多线程编程的手段也就逐渐被人们认可和喜爱了. 记得在我刚刚学习线程进程的时候就想,为什么很少见人把多进程和多线程结合起来使用呢,把二者结合起来不是更好吗?现在想想当初真是too young too simple,后文就主要讨论一下这个问题. 进程与线程模型 进程的经典定义就是

Linux中exec命令相关

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两类:外部命令和内部命令.外部命令是通过系统调用或独立的程序实现的,如sed.awk等等.内部 命令是由特殊的文件格式(.def)所实现,如cd.history.exec等等. 在说明exe和source的区别之前,先说明一下fork的概念. fork是linux的系统调用,用来创建子进程(child

十天学Linux内核之第二天---进程

原文:十天学Linux内核之第二天---进程 都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘,也希望大家多指点,让我更有进步.今天讲的全是进程,这点在大二的时候就困惑了我,结果那个时候我就止步不前了,这里主要讲的是为何引入进程.进程在Linux空间是如何实现的,并且描述了所有与进程执行相关的数据结构,最后还会讲到异常和中断等异步执行流程,它们是如何和Linux内核进行交互的,下面我就来具体介绍一下进程的奥妙. 首先我们要明确一个

Linux子进程

1.fork()函数概述 在Linux程序中,用fork()可以创建一个子进程,具体而言: 调用fork()时,会创建当前进程的一份拷贝: 当前进程称为父进程(parentprocess),新创建的进程称为子进程(childprocess): 从fork()调用点开始,父子进程都开始执行. 2.区分父子进程 2.1fork()函数 [email protected]:~$man fork | more FORK(2) Linux Programmer's Manual FORK(2) NAME