linux进程管理fork,Linux -- 进程管理之 fork() 函数

一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

Test1

for(int i = 0; i<2; i++)

{

if(fork() == 0)

printf("A\n");

else

printf("B\n");

}

上述代码中,fork() 执行后会出现两个进程,子进程中的 fork() 返回值为 0,父进程中 fork() 返回值则是子进程的 pid

执行结果如下图

dfd034bc86130ddd1272f2cbae07a61d.png

Test2

将上述代码稍微修改一下

for(int i = 0; i<2; i++)

{

if(fork() == 0)

printf("A");

else

printf("B");

}

该循环中打印没有字符 "\n",无法刷新缓冲区

每一次 fork() 会复制之前进程中缓冲区的字符

最后执行结果为

BBBAABAA

(取决于两个进程执行的顺序)

Test3

if(fork() && fork())

printf("A\n");

else

printf("B\n");

该 if 块中第一个 fork() 生成一个子进程,返回 0,所以第二个 fork() 不会执行

父进程返回 pid,执行第二个 fork(),再次产生一个子进程

所以最终 printf 调用了三次,最后执行结果为

A

B

B

Test4

#include

#include

// 测试栈空间的变量

void f0()

{

int tmp = 0;

int pid = fork();

if(pid == 0)

{

tmp++;

printf("son\n");

}

else if(pid > 0)

{

printf("parents\n");

}

else

{

return;

}

printf("%d\n",tmp);

}

int tmp1 = 5;

// 测试全局变量

void f1()

{

int pid = fork();

if(pid == 0)

{

tmp1++;

printf("son\n");

}

else if(pid > 0)

{

printf("parents\n");

}

else

{

return;

}

printf("%d\n",tmp1);

}

// 测试堆区变量

void f2()

{

int *tmp2 = (int*)malloc(sizeof(int));

*tmp2 = 0;

int pid = fork();

if(pid == 0)

{

(*tmp2)++;

printf("son\n");

}

else if(pid > 0)

{

printf("parents\n");

}

else

{

return;

}

printf("%d\n",*tmp2);

}

通过在 main 分别执行以上三个函数,输出中父进程与子进程打印的 tmp 值均不相同

可以发现,fork() 后生成新的子进程与父进程是相互独立的,拥有独立的 VMA

进程管理之fork函数

fork函数的定义 #include #include pid_t fork(void); fork函数在父进程中返回子进程的 ...

UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习

lienhua342014-10-07 在“进程控制三部曲”中,我们学习到了 fork 是三部曲的第一部,用于创建一个新进程.但是关于 fork 的更深入的一些的东西我们还没有涉及到,例如,fork ...

【Linux编程】进程标识符与fork函数

ID为0的进程一般是调度进程.常被称为交换进程(swapper),是内核中的系统进程. ID为1的进程叫做init进程,是一个普通用户进程,不属于内核,由内核调用. 一个现有进程能够调用fork函数创 ...

Linux进程管理知识整理

Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) ...

Linux性能及调优指南(翻译)之Linux进程管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java学习(83):常用基础类object

//常用基础类 public class ObjectClass {private String name;private int age;public void say(){System.out.println(name);System.out.println(age);}public void setAge(int age) {this.age age;}public int getAge() {return age;}public void setName(String name) {th…

Elasticsearch及相关插件的安装

Elasticsearch及相关插件的安装 1、安装Elasticsearch并启动服务 2、安装第三方插件 2.1、Head插件 是Elasticsearch的一个集群管理工具&#xff0c;可以通过它来查看和搜索ES的数据&#xff0c;是完全由html5编写的独立网页程序。 2.2、Bigdesk插件 是Elasticsearch的一个集群…

java学习(84):object常用方法tostring,equals,hashcode

//object常用方法 public class test21 {public static void main(String[] args) {Object obj new Object();ObjectCl usr new ObjectCl();usr.setAge(6);usr.setName("歌谣");usr.say();//tostringString str usr.toString();System.out.println(str);//equalsO…

linux不支持32,Visual Studio Code 1.36发布,不再支持Linux 32位

VS Code 1.36&#xff0c;即2019年6月发布的Visual Studio Code&#xff0c;已发布。新版本已更新至Electron 4.x&#xff0c;意味着它将不再在Linux 32位上运行。现在可以将文件夹从VS Code外部拖放到文件资源管理器中进行复制。 以前&#xff0c;在将文件夹放入VS Code Explo…

java学习(85):Interage包装类基本使用

测试类 public class test22 {public static void main(String[] args){int num5;Integer obj1new Integer(num);System.out.println("obj1的值为"obj1);Integer obj2100;System.out.println("obj2的值为"obj2);Integer obj3new Integer("-789"…

linux 调用rest接口,REST调用

1. 概述与SOAP相比&#xff0c;REST WebService简化了调用&#xff0c;也降低了技能要求。REST 近年来已经成为最主要的 Web 服务设计模式。 事实上&#xff0c;REST 对 Web 的影响非常大&#xff0c;由于其使用相当方便&#xff0c;已经普遍地取代了基于 SOAP 和 WSDL 的接口设…

java学习(86):Interage方法compareto,parseint,intvalue

public class test22 {public static void main(String[] args){int num5;Integer obj1new Integer(num);System.out.println("obj1的值为"obj1);Integer obj2100;System.out.println("obj2的值为"obj2);Integer obj3new Integer("-789");System…

JAVA四则运算(读写文件)

完成时间&#xff1a;17&#xff1a;10 package 四则运算试题;import java.io.BufferedReader; import java.io.PrintStream; import java.util.Scanner; import java.io.FileReader; import java.io.IOException; public class jisuanti {public static void main(String[] ar…

java学习(87):Interage包装类进制转换

public class test22 {public static void main(String[] args){int num5;Integer obj1new Integer(num);System.out.println("obj1的值为"obj1);Integer obj2100;System.out.println("obj2的值为"obj2);Integer obj3new Integer("-789");System…

java学习(88):Charactor包装类

//Character包装类 public class test23 {public static void main(String[] args){char chA;//使用构造方法Character obj1new Character(中);//使用静态方法Character obj2Character.valueOf(ch);//获取char值char zhongobj1.charValue();System.out.println(zhong);int reso…

【Java】 剑指offer(67) 把字符串转换成整数

本文参考自《剑指offer》一书&#xff0c;代码采用Java语言。 更多&#xff1a;《剑指Offer》Java实现合集 题目 请你写一个函数StrToInt&#xff0c;实现把字符串转换成整数这个功能。当然&#xff0c;不能使用atoi或者其他类似的库函数。 思路 题目很简单&#xff0c;主要就…

java学习(89):Charactor包装类统计

//Character方法数量统计 public class test24 {public static void main(String[] args) {char ch A;//使用构造方法Character obj1 new Character(中);//使用静态方法Character obj2 Character.valueOf(ch);char[] arr {5, A, a, C, D, U, 5, 9, ,J,9};countChar(arr);}p…

java学习(90):Character方法大小写转换

//Character方法大小写转换 public class test25 {public static void main(String[] args) {char ch A;//使用构造方法Character obj1 new Character(中);//使用静态方法Character obj2 Character.valueOf(ch);char[] arr {5, A, a, C, D, U, 5, 9, ,J,9};//countChar(arr…

c语言实现socket转json,C++解析JSON进行网络传输--一个通过JSON方式的socket传输

1、客户端&#xff1a;#include "json//json.h"#include #pragma comment(lib, "WS2_32.lib")#pragma comment(lib, "json_vc71_libmtd.lib")int main(){Json::Value val;Json::StyledWriter style_write;val["name"] "xiaoli&q…

《linux就该这么学》第六节,计划任务和用户身份管理!

课本笔记&#xff1a; case条件测试语句 4.4&#xff1a;计划任务服务 at 设置一次性计划任务 at 时间 //设置执行的任务 at -l或atq // 查看设置好但未执行的任务 ctrld 保存at计划任务 ctrlc取消at计划任务 atrm 任务序号…

java学习(91):System类

//System类 import java.util.Date; import java.util.Properties; public class test26 {public static void main(String[] args){testOut(-1);//获取系统时间long sysTimeSystem.currentTimeMillis();System.out.println(sysTime);Date datenew Date();System.out.println(d…

c语言 用一维数组存储二叉树,用一维数组存储二叉树时,总是以前序遍历顺序存储结点。( ? )...

用前模式包括献不治疗的积人本哪项以下极贡。维数包括学校工作的过程和方面以下技术几个社区。组存总题大括&#xff1a;致包青少区问年社。可能在含工气体含有有或井施&#xff0c;备合格的个人和相防护应配用具应(。部件理液更换切断或修液压压钳应先。特殊须提劳动理情况前解…

Servlet 文件上传

Servlet 可以与 HTML form 标签一起使用&#xff0c;来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。 本文使用到的文件有&#xff1a; 创建一个文件上传表单 下面的 HTML 代码创建了一个文件上传表单。以下几点需要注意&#xff1a; 表单 method…

java学习(92):线程的创建方法一

//线程的创建方法1class Xc extends Thread {public void run(){for (int i0;i<20;i){System.out.println("我是歌谣");}} } public class test27{public static void main(String[] args){Xc xcnew Xc();xc.start();//程序会自动调用run方法for (int i0;i<20;…

java学习(93):线程的创建方法二

//创建线程的第二种方法class Xc2 implements Runnable {public void run(){for (int i0;i<20;i){System.out.println("我是歌谣");}} } public class test28{public static void main(String[] args){Xc2 xc2new Xc2();Thread anew Thread(xc2);a.start();//xc.s…