进程API

linux下进程的api

    • fork
    • wait
    • exec

fork

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>/*
linux环境运行
子进程并不是完全拷贝了父进程。具体来说,虽然它拥有自己的
地址空间(即拥有自己的私有内存)、寄存器、程序计数器等,但是它从 fork()返回的值是
不同的。父进程获得的返回值是新创建子进程的 PID,而子进程获得的返回值是 0。这个差
别非常重要,因为这样就很容易编写代码处理两种我同的情况(像上面那样)。
*/int main(int argc, char *argv[])
{printf("hello world (pid:%d)\n", (int)getpid());int rc = fork();if (rc < 0){fprintf(stderr, "fork failed\n");exit(1);}else if (rc == 0) // 子进程{printf("hello, I am child(pid:%d)\n", (int)getpid());}else // 父进程{printf("hello, I am parent of %d (pid:%d)\n", rc, (int)getpid());}return 0;
}

运行结果

在这里插入图片描述

wait

 // 在父进程的逻辑中增加这两行就行
#include <sys/wait.h>int wc = wait(NULL);
-------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>/*
linux环境运行
子进程并不是完全拷贝了父进程。具体来说,虽然它拥有自己的
地址空间(即拥有自己的私有内存)、寄存器、程序计数器等,但是它从 fork()返回的值是
不同的。父进程获得的返回值是新创建子进程的 PID,而子进程获得的返回值是 0。这个差
别非常重要,因为这样就很容易编写代码处理两种我同的情况(像上面那样)。
*/int main(int argc, char *argv[])
{printf("hello world (pid:%d)\n", (int)getpid());int rc = fork();if (rc < 0){fprintf(stderr, "fork failed\n");exit(1);}else if (rc == 0) // 子进程{printf("hello, I am child(pid:%d)\n", (int)getpid());}else // 父进程{   int wc = wait(NULL);printf("hello, I am parent of %d (pid:%d)\n", rc, (int)getpid());}return 0;
}

在这里插入图片描述

exec

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>/*
linux环境运行
子进程并不是完全拷贝了父进程。具体来说,虽然它拥有自己的
地址空间(即拥有自己的私有内存)、寄存器、程序计数器等,但是它从 fork()返回的值是
不同的。父进程获得的返回值是新创建子进程的 PID,而子进程获得的返回值是 0。这个差
别非常重要,因为这样就很容易编写代码处理两种我同的情况(像上面那样)。
*/int main(int argc, char *argv[])
{printf("hello world (pid:%d)\n", (int)getpid());int rc = fork();if (rc < 0){fprintf(stderr, "fork failed\n");exit(1);}else if (rc == 0) // 子进程{printf("hello, I am child(pid:%d)\n", (int)getpid());char *myargs[3];myargs[0] = strdup("wc"); // 就是复制myargs[1] = strdup("p3.c");myargs[2] = NULL;execvp(myargs[0],myargs); // 表示 wc p3.c 告诉我我该文件有多少行、多少单词,以及多少字节printf("this shouldn't print out");}else // 父进程{printf("hello, I am parent of %d (pid:%d)\n", rc, (int)getpid());}return 0;
}

在这里插入图片描述

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

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

相关文章

分布式锁3: zk实现分布式锁

一 zk 实现分布式锁 1.1 zk分布式操作命令 1.指令&#xff1a; ls / get /zookeeper create /aa "test" delete /aa set /aa "test1" 2..znode节点类型&#xff1a; 永久节点&#xff1a;create /pa…

人工智能-循环神经网络的简洁实现

循环神经网络的简洁实现 如何使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型。 我们仍然从读取时光机器数据集开始。 import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, num_steps 32, 35…

【AI】行业消息精选和分析(11月22日)

今日动态 &#x1f453; Video-LLaVA&#xff1a;视觉语言模型革新&#xff1a; - 图像和视频信息转换为文字格式。 - 多模态理解能力&#xff0c;适用于自动问答系统等。 &#x1f4c8; 百度文心一言用户数达7000万&#xff1a; &#x1f50a; RealtimeTTS&#xff1a;实时文本…

还记得高中生物书上的莫斯密码吗?利用Python破解摩斯密码的代码示例!

文章目录 前言摩尔斯电码Python实现摩斯密码对照表加密解密测试 完整代码总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Py…

力扣.面试题 04.06. 后继者(java 树的中序遍历)

Problem: 面试题 04.06. 后继者 文章目录 题目描述思路解题方法复杂度Code 题目描述 设计一个算法&#xff0c;找出二叉搜索树中指定节点的“下一个”节点&#xff08;也即中序后继&#xff09;。 如果指定节点没有对应的“下一个”节点&#xff0c;则返回null。 思路 由于题…

「Docker」如何在苹果电脑上构建简单的Go云原生程序「MacOS」

介绍 使用Docker开发Golang云原生应用程序&#xff0c;使用Golang服务和Redis服务 注&#xff1a;写得很详细 为方便我的朋友可以看懂 环境部署 确保已经安装Go、docker等基础配置 官网下载链接直达&#xff1a;Docker官网下载 Go官网下载 操作步骤 第一步 创建一个…

【SpringBoot】ThreadLocal 的详解

一、ThreadLocal 简介 ThreadLocal 叫做线程变量&#xff0c;意思是 ThreadLocal 中填充的变量属于当前线程&#xff0c;该变量对其他线程而言是隔离的&#xff0c;也就是说该变量是当前线程独有的变量。ThreadLocal 为变量在每个线程中都创建了一个副本&#xff0c;那么每个线…

虚拟机centos设置网络模式(桥接|NAT)

前言 桥接模式是通过物理网卡直接与外部网络建立联系的&#xff0c;而NAT模式则是通过虚拟网卡VMnet1或VMnet8通过宿主机共享IP与外部建立网络关系当需要将虚拟机资源共享给局域网用户使用时&#xff0c;宜采用桥接模式&#xff1b;当需要保护虚拟机资源&#xff0c;确保只能由…

封面从这里取好啦

文章目录 前端NPMViteNode.js 后端JavaMavenPython 数据库算法 前端 NPM Vite Node.js 后端 Java Maven Python 数据库 算法

C#使用whisper.net实现语音识别(语音转文本)

目录 介绍 效果 输出信息 项目 代码 下载 介绍 github地址&#xff1a;https://github.com/sandrohanea/whisper.net Whisper.net. Speech to text made simple using Whisper Models 模型下载地址&#xff1a;https://huggingface.co/sandrohanea/whisper.net/tree…

【wireshark】基础学习

TOC 查询tcp tcp 查询tcp握手请求的代码 tcp.flags.ack 0 确定tcp握手成功的代码 tcp.flags.ack 1 确定tcp连接请求的代码 tcp.flags.ack 0 and tcp.flags.syn 1 3次握手后确定发送成功的查询 tcp.flags.fin 1 查询某IP对外发送的数据 ip.src_host 192.168.73.134 查询某…

飞瓜数据B站丨B站UP主11月第3周榜单排行榜榜单(B站平台)发布!

飞瓜轻数发布2023年11月13日-11月19日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营…