Linux中的进程 --- fork、vfork、exec函数族、进程退出方式等分析

fork和vfork分析:

  在fork还没有实现copy on write之前,Unix设计者很关心fork之后立即执行exec所造成的地址空间浪费,也就是拷贝进程地址空间时的效率问题,所以引入vfork系统调用。

  vfork有个限制,子进程必须立刻执行_exit或者exec函数。

  即使fork实现了copy on write,效率也没有vfork高,但是现在已经不推荐使用vfork了,因为几乎每一个vfork的实现,都或多或少存在一定的问题。

fork:子进程拷贝父进程的数据段;vfork:子进程与父进程共享数据段。

fork:父子进程的执行顺序不确定;vfork:子进程先运行,父进程后运行。

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9348170.html

时间: 2024-10-18 21:37:17

Linux中的进程 --- fork、vfork、exec函数族、进程退出方式等分析的相关文章

UNIX环境编程学习笔记(20)——进程管理之exec 函数族

lienhua342014-10-07 在文档“进程控制三部曲”中,我们提到 fork 函数创建子进程之后,通常都会调用 exec 函数来执行一个新程序.调用 exec 函数之后,该进程就将执行的程序替换为新的程序,而新的程序则从 main 函数开始执行. UNIX 提供了 6 种不同的 exec 函数供我们使用.它们的原型如下所示, #include <unistd.h>int execl(const char *pathname, const char *arg0, ... /* (cha

Linux进程实践(3) --进程终止与exec函数族

进程的几种终止方式 (1)正常退出 从main函数返回[return] 调用exit 调用_exit/_Exit (2)异常退出 调用abort   产生SIGABOUT信号 由信号终止  Ctrl+C [SIGINT] ...(并不完全, 如return/pthread_exit等) 测试[exit/_exit] //尝试查看该程序的打印输出 int main() { cout << "In main, pid = " << getpid(); //去掉了en

Linux系统编程——进程替换:exec 函数族

在 Windows 平台下.我们能够通过双击运行可运行程序.让这个可运行程序成为一个进程:而在 Linux 平台.我们能够通过 ./ 运行,让一个可运行程序成为一个进程. 可是,假设我们本来就执行着一个程序(进程),我们怎样在这个进程内部启动一个外部程序.由内核将这个外部程序读入内存,使其执行起来成为一个进程呢?这里我们通过 exec 函数族实现. exec 函数族.顾名思义.就是一簇函数,在 Linux 中,并不存在 exec() 函数.exec 指的是一组函数.一共同拥有 6 个: [cpp

对linux中source,fork,exec的理解以及case的 使用

fork   使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process,但 parent process 的环境是不会因 child process 的改变而改变的. source   使用 source 方式运行 script 时, 就是让 script 在当前 process 内执行, 而不是产生一个 chil

查找Linux中内存和CPU使用率最高的进程

下面的命令会查看到按照RAM和CPU降序方式的前最高几名进程的列表: [[email protected] ~]# ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head PID PPID CMD %MEM %CPU 1 0 /sbin/init 0.1 0.0 2 0 [kthreadd] 0.0 0.0 3 2 [migration/0] 0.0 0.0 4 2 [ksoftirqd/0] 0.0 0.0 5 2 [stopper/0] 0.0 0

linux 中批量杀死包含某个关键字的进程

去公司面试的时候关于Linux命令一般会问这个问题: 批量杀死包含php的所有进程...... 一开始我是不会的,只知道ps找出来进程.后来知道了可以用grep过滤出包含Php的进程,后来又知道了用kill -9 可以杀死,后来又知道了用xargs 可以进行参数代换,所以记录一下. ps -aux | grep "php" | grep -v grep | cut -c 9-15 | xargs kill -9 分成5段,利用管道命令传递. 第一段是列出所有的进程: 第二段是过滤出包含

mac或linux中打开.bashrc,编辑完之后如何保存退出

这要主要看是用什么程序来编辑文件. 如果是vi,则:Esc 退出编辑模式,输入以下命令: :wq  保存后退出vi,若为 :wq! 则为强制储存后退出(常用) :w    保存但不退出(常用) :w!   若文件属性为『只读』时,强制写入该档案 :q    离开 vi (常用) :q!   若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案. :e!   将档案还原到最原始的状态!

【转载】linux进程控制-exec系列 exec系统调用

inux进程控制-exec系列 说是exec系统调用,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是: #include <unistd.h>int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int execle(const char *path, const char *arg, ...,

Python进程分支fork和exec详解

在python中,任务并发一种方式是通过进程分支来实现的.在linux系统在,通过fork()方法来实现进程分支. fork()调用后会创建一个新的子进程,这个子进程是原父进程的副本.子进程可以独立父进程外运行. fork()是一个很特殊的方法,一次调用,两次返回. fork()它会返回2个值,一个值为0,表示在子进程返回;另外一个值为非0,表示在父进程中返回子进程ID. 以下只能在linux中运行,不能在window下运行. 进程分支fork() 实例如下: #!/usr/bin/python