进程:fork的使用

2023-05-16

1.用fork函数创建一个进程 pid_t fork(void); 

fork函数调用成功返回两次

返回值为0,代表当前进程是子进程

返回值非负数(子进程的进程ID),代表当前进程为父进程

调用失败,返回-1

2.fork创建一个子进程的一般目的

 

 

#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
        pid_t pid;
        printf("before fork:%d\n",getpid());

        pid=fork();
        if(pid > 0)
        {
                printf("father:pid=%d,getpid()=%d\n",pid,getpid());
        }
        else if(pid == 0)
        {
                printf("child:pid=%d,getpid()=%d\n",pid,getpid());
        }


        return 0;
}
hcc@ubuntu:~/LinuxSystemProgramming/PROCESS$ gcc demo.c 
hcc@ubuntu:~/LinuxSystemProgramming/PROCESS$ ./a.out
before fork:90850
father:pid=90851,getpid()=90850
child:pid=0,getpid()=90851

 3.vfork函数 也可以创建进程,与fork有什么区别

关键区别一: vfork 直接使用父进程存储空间,不拷贝。

关键区别二: vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程:fork的使用 的相关文章

  • 如何从子进程(通过 Parallel::ForkManager 分叉)传递变量?

    我的查询 在下面的代码中我试图打印 commandoutput 0 被转移或传递到即将到来的子程序中 我尝试通过转移来传递它 但我失败了 你能帮我正确的方法吗 Code my max forks 4 createThreads my com
  • 克隆系统调用 OS X 未链接 - 未定义的符号 [重复]

    这个问题在这里已经有答案了 我想使用cloneOS X 上的系统调用 这是一个 Unix 系统调用 所以应该不是问题 对吧 我已经成功尝试使用fork vfork以及其他类似的功能 这是我正在尝试的程序 include
  • 如何获取子进程的退出状态?

    两个示例输出 由我的教授提供 是 这些在 Linux 终端中输入 ibrahim ibrahim latech prog2 Current working directory home ibrahim Executing ls all l
  • 分叉 - 相同的内存地址?

    这是关于 Linux 中的 C 语言 I have fork in main 我在其中创建了 2 个子进程 然后 在两个子进程中运行该函数abc 其中有一个局部变量x 我在里面写了一些值 然后我打印这个变量的地址printf p x 两个进
  • 有没有办法自动关闭 fork() 上的某些句柄?

    背景 我有一个大型的现有进程 它恰好在 AIX 上 所以基本上是 POSIX 语义 它是一个更大系统的一部分 现有流程设计为连续运行 此过程的一个新要求是处理一种新型的复杂输入流 为了降低风险 我决定分叉 执行一个子进程来执行实际的输入处理
  • 用C语言创建进程树

    我将如何创建一个看起来像深度为 N 的平衡三元树的流程层次结构 意味着每个进程有 3 个子进程 因此深度 N 的树中将有 3 N 1 2 个进程 要创建新进程 我只想使用 fork 这是我到目前为止所拥有的 但我认为它不起作用 因为我不处理
  • 等待 Ruby child pid 退出

    我正在尝试分叉一个子进程 等待它完成 如果它在一定时间内没有完成 则杀死它 这是我到目前为止所拥有的 servers each do server pid fork do puts Forking server output doing s
  • unix fork exec 序列真的像听起来那么昂贵吗?

    我正在读关于fork and exec对于考试 我的书说 每当需要在 UNIX 系统中运行一个新的 不同的 进程时 您都会分叉当前进程 然后是execve 然而 它也说 每当fork被调用时 父进程的整个内存映像被复制到新进程 那么我的问题
  • 如何杀死shell的所有子进程?

    我正在编写一个 bash 脚本 它可以完成几件事 一开始它会启动几个监视脚本 每个脚本都运行一些其他工具 在我的主脚本结束时 我想杀死从我的外壳中产生的所有东西 所以 它可能看起来像这样 bin bash some monitor1 sh
  • 更新 Github 上分叉存储库的多个分支

    我有一个分叉的 github 存储库 称为 repo O 称为我的分叉 repo F 其中包含大约 8 个分支 其他贡献者已在 repo O 的多个分支上对 repo O 进行了多次 100 次 提交 我现在想将这些更改放入我的分叉存储库
  • fork:关闭所有打开的套接字

    我在用multiprocessing Pool map 它分叉当前进程 我的理解是 默认情况下 所有文件描述符包括插座分叉时从主进程复制 主进程本身是一个Web服务器 使用cherrypy http cherrypy org 所以这会对开放
  • 在后台运行 Ant 目标而不使用spawn=true

    我想在后台启动一个服务器 返回并执行一些其他目标 然后在 Ant 完成执行所有目标时停止服务器 我提出了以下两种解决方案 但它们都阻止 Ant 执行后续目标 因为我希望进程最终终止 所以我不想使用spawn true 还有其他解决办法吗
  • 为什么fork程序printf执行更多时间[重复]

    这个问题在这里已经有答案了 来自fork 的手册页 http linux die net man 2 fork我读到 fork 创建父进程的副本 但无法理解为什么下面的程序printf执行8次 我读Linux 中 fork 的工作原理 ht
  • 使用 printf 在 c 中 fork() [重复]

    这个问题在这里已经有答案了 有 2 个不同的程序 它们都很小 例如 int main printf print hello fork int main printf print hello n fork 输出 1 是 print hello
  • 为什么fork后关闭文件描述符会影响子进程?

    我想通过单击按钮在linux中运行程序 因此我编写了一个函数execute void execute const char program call const char param pid t child vfork if child 0
  • 使用 python os.fork() 可以创建多少个进程

    如果我在下面这样做 for i in range 10000 os fork 这是怎么回事 不考虑收获 我只是想知道os fork 在linux中可以创建多少个进程 如果它像windows一样 只能创建大约2000个进程 那么接下来的800
  • 如何在 R 中 fork 进程

    我试图了解 R 多核包实现的分叉系统 包的例子是 p lt fork if inherits p masterProcess cat I m a child Sys getpid n exit I was a child cat I m t
  • 监控子进程的内存使用情况

    我有一个 Linux 守护进程 它分叉几个子进程并监视它们是否崩溃 根据需要重新启动 如果父进程可以监视子进程的内存使用情况 以检测内存泄漏并在超出一定大小时重新启动子进程 那就太好了 我怎样才能做到这一点 您应该能够从 proc PID
  • 无法在 github 上的特定分支上生成 git no such file or directory

    问题出在这个 fork repo 上 https github com RubenWillems CCNet https github com RubenWillems CCNet 我可以在同一台笔记本电脑上安装其他叉子 但不能使用此叉子
  • 为什么“fork()”调用没有在无限循环中优化? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 考虑到 C 11 1 10 24 in intro multithread 该实现可以假设任何线程最终都会执行以下操作之一 终止 调用

随机推荐

  • SLAM面试笔记(4) — 企业面试汇总

    目录 1 大疆 一面 xff08 50min xff09 二面 xff08 30min xff09 三面 xff08 30min xff09 2 华为 一面 xff08 30min xff09 二面 xff08 30min xff09 三面
  • ORB-SLAM2的稠密重建实战(1) — 流程与函数功能说明

    目录 0 系统整体流程 1 输出信息 2 初始化文件 3 初始化并运行追踪线程Tracking Step1 xff1a 地图初始化 Step2 xff1a 初始化成功 xff08 mbOnlyTracking xff09 Step3 xff
  • SLAM面试笔记(5) — ROS面试

    目录 1 ROS概述 2 ROS通信机制 问题 xff1a 服务通信概念 问题 xff1a 服务通信理论模型 问题 xff1a 参数服务器概念 问题 xff1a 参数服务器理论模型 问题 xff1a 参数服务器实现函数 3 ROS常用命令
  • 多线程常见的面试题

    多线程常见的面试题 xff1a 1 什么是线程和进程 线程与进程的关系 区别及优缺点 xff1f 进程是程序的一次执行过程 xff0c 是系统运行程序的基本单位 xff0c 因此进程是动态的 系统运行一个程序即是一个进程从创建 xff0c
  • docker 错误 WARNING: IPv4 forwarding is disabled. Networking will not work.

    这个错误出现在使用 docker 的服务器上 xff0c 当你进入 docker 容器时 xff0c 如果出现这样的 WARNING 提示 xff0c 则表示服务器没有开启 IPv4 转发 xff0c 按照本文的方法配置开启转发即可 错误提
  • 嵌入式中异常/中断/事件的区别

    嵌入式中异常 xff0f 中断 xff0f 事件的区别 Cortex M3在内核水平上搭载了一个异常响应系统 xff0c 支持为数众多的系统异常和外部中断 其中 xff0c 编号1 15的对应系统异常 xff0c 大于等于16的则都是外部中
  • 【起航】OpenHarmony远征02

    OpenHarmony内核 目前OpenHarmony针对不同量级的系统 xff0c 可以使用不同形态的内核 xff0c 轻量和小型的系统可以使用Liteos xff0c 小型和标准系统可以使用Linux Liteos系统是面向IOT领域的
  • momenta面经总结

    一 C 43 43 01 堆和栈的区别 xff0c 栈的静态分配和动态分配 xff1f 栈由操作系统分配释放 xff0c 用于存放函数的参数值 局部变量等 xff0c 栈中存储的数据的生命周期随着函数的执行完成而结束 堆由开发人员分配和释放
  • Orbslam2使用opencv4解决cv_bridge冲突问题

    在研究orbslam2在opencv4下使用会和cv bridge4冲突 解决方法 xff1a 1条消息 ROS学习 xff1a cv bridge与opencv版本冲突三种解决方案 Mr Qin 的博客 CSDN博客 cv bridge
  • 智能车浅谈——方向控制篇

    文章目录 前言自动控制理论人工控制系统自动控制 方向控制典型环节对应典型环节分析给定环节与给定量比较环节与偏差量控制环节与控制量执行机构舵机PWM技术舵机中值及限幅转向控制 被控对象与被控量反馈对象与反馈量 控制思路结束语智能车系列文章汇总
  • 嵌入式学习笔记——使用寄存器编程操作GPIO

    使用寄存器编程操作GPIO 前言GPIO相关的寄存器GPIO 端口模式寄存器 GPIOx MODER x 61 A I 位操作 GPIO 端口输出类型寄存器 GPIOx OTYPER x 61 A I GPIO 端口输出速度寄存器 GPIO
  • 2021-基于卷积和LSTM神经网络的视频分类时间融合方法在暴力检测中的应用

    A Temporal Fusion Approach for Video Classification with Convolutional and LSTM Neural Networks Applied to Violence Dete
  • uni-app(Vue)直播拉流

    html span class token tag span class token tag span class token punctuation lt span div span span class token attr name
  • Docker 容器常见故障排查及处理

    Docker 容器常见故障排查及处理 本文来源于公司论坛发表的帖子 Docker是一种相对使用较简单的容器 xff0c 我们可以通过以下几种方式获取信息 xff1a 1 通过docker run执行命令 xff0c 或许返回信息 2 通过d
  • CMake教程

    本文参考 xff1a 1 https blog csdn net whahu1989 article details 82078563 2 https blog csdn net kai zone article details 82656
  • docker / containerd 错误 panic: invalid freelist page: 162, page type is leaf

    错误描述 containerd 服务启动失败 xff0c 使用命令 journalctl xe u containerd 查看日志如下所示 xff1a span class token punctuation span root 64 k8
  • 制作自己的rosgo

    制作自己的rosgo 首先 xff0c 什么是rosgo xff1f ROS2GO xff08 ROS To Go xff09 是一款随时可用的高速USB闪存驱动器 xff0c 已安装Ubuntu ROS和常用软件包 xff0c 可以从外部
  • 解决libssl.so.1.0.0 => not found以及libcrypto.so.1.0.0 => not found

    现在的apt源中 xff0c libssl1 0的版本一般是libssl1 0 2 xff0c libcrypto1 0的版本一般是libcrypto1 0 2 但是很多应用要使用libssl so 1 0 0和libcrypto so 1
  • cmake设置默认CMAKE_BUILD_TYPE

    原文 xff1a https cmake org pipermail cmake 2009 June 030311 html 在CMakeLists txt里写入 IF NOT CMAKE BUILD TYPE set CMAKE BUIL
  • 进程:fork的使用

    1 用fork函数创建一个进程 pid t fork void fork函数调用成功 xff0c 返回两次 返回值为0 xff0c 代表当前进程是子进程 返回值非负数 xff08 子进程的进程ID xff09 xff0c 代表当前进程为父进