iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >怎么用Linux fork创建子进程
  • 946
分享到

怎么用Linux fork创建子进程

2023-06-28 08:06:59 946人浏览 八月长安
摘要

今天小编给大家分享一下怎么用linux fork创建子进程的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。fork()函数通过

今天小编给大家分享一下怎么用linux fork创建子进程的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。

怎么用Linux fork创建子进程

1. pid_t fork(void);   

功能:创建父子进程   

参数:无   

返回值:成功:在父进程中:返回值为子进程的PID     

在子进程中:返回值为0     失败:-1 注意:   

1)fork函数是用来创建进程的,fork之后产生了两个进程,每个进程都会有返回值,     所以父进程中返回的是子进程的进程号(>0);在子进程中返回0

2)子进程几乎拷贝了父进程的全部内容。      包括代码、数据、系统数据段中的pc值、栈中的数据、父进程中打开的文件等;但它们的PID、PPID是不同的。

3)父子进程有独立的地址空间,互不影响;当在相应的进程中改变全局变量静态变量,都互不影响。

4)若父进程先结束,子进程成为孤儿进程被init进程收养(此时子进程的父亲就是init),子进程变成后台进程。(init进程号为1)

5)若子进程先结束,父进程如果没有及时回收,子进程变成僵尸进程(要避免僵尸进程产生)

2.  pid_t getpid(void); 

功能:得到正在调用此接口的进程的进程号 

返回值:得到PID号

3.  pid_t getppid(void); 

功能:得到正在调用此接口的进程的父进程号 

返回值:得到PID

4. pid_t wait(int *status) 头文件

功能:阻塞等待任意子进程的结束,回收资源 status是一个整型指针,指向的对象用来保存子进程退出时的状态。 status若为空,表示忽略子进程退出时的状态 status若不为空,表示保存子进程退出时的状态 另外,子进程的结束状态可由Linux中一些特定的宏来测定。

5. pid_t waitpid(pid_t pid, int *status, int options) 

功能:等待子进程的结束,回收资源 

参数:   

(1)pid: pid>0:只等待进程ID等于pid的子进程,不管已经有其他子进程运行结束退出了,只要指定的子进程还没有结束,waitpid就会一直等下去。 pid=-1:等待任何一个子进程退出,此时和wait作用一样。   

(2)status:同wait   

(3)options:WNOHANG:不阻塞,返回 0(没有接受到),pid号(成功接收到) 0:同wait,阻塞父进程,等待子进程退出。失败 -1 ,成功 pid号 返回值: 正常:结束的子进程的进程号,使用选项WNOHANG且没有子进程结束时:0 出错:-1 等价:wait(NULL) == waitpid(-1, NULL, 0)   WEXITSTATUS(status)

6. void exit(int status); 功能:结束正在调用的进程,程序结束前,会清理缓存

7. _exit:void _exit(int status); 功能:结束正在调用的进程,程序结束前不清理缓存区 注意: status是一个整型的参数,可以利用这个参数传递进程结束时的状态。 通常0表示正常结束;其他的数值表示出现了错误,进程非正常结束。 在实际编程时,可以用wait系统调用接收子进程的返回值,进行相应的处理。 exit用于结束正在运行的整个程序,它将参数返回给OS,把控制权交给操作系统; 而return 是退出当前函数,返回函数值,把控制权交给调用函数。

fork创建子进程例子:

 #include #include #include #include #include  int main(int arGC, const char *argv[]) {     pid_t pid;     pid = fork();     if(pid == -1)//失败返回 -1     {         perror("fork fail : ");         exit(1);     }     else if(pid == 0) //在子进程中:返回值为0     {         printf("child\n");         printf("child getpid() %d \n",getpid());         printf("child getppid() %d \n",getppid());         exit(1);     }     else //在父进程中:返回值为子进程的PID     {         int s;         wait(&s);         printf("fork\n");         printf("father pid %d\n",pid);//子进程pid         printf("father getpid() %d \n",getpid()); //父进程pid         printf("father getppid() %d \n",getppid());//父进程的父进程的pid         printf("father %d\n",WEXITSTATUS(s));         perror((char*)&s);     }     return 0; }

测试

怎么用Linux fork创建子进程

子进程会复制父进程的全部内容,出来pid号和ppid号,但是子进程程序执行从 fork 函数之后执行的

以上就是“怎么用Linux fork创建子进程”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网操作系统频道。

--结束END--

本文标题: 怎么用Linux fork创建子进程

本文链接: https://www.lsjlt.com/news/318057.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用Linux fork创建子进程
    今天小编给大家分享一下怎么用Linux fork创建子进程的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。fork()函数通过...
    99+
    2023-06-28
  • Linux系统如何使用fork命令创建子进程执行任务
    小编给大家分享一下Linux系统如何使用fork命令创建子进程执行任务,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!fork 系统调用要创建一个进程,最基本的系统调用是 fork: # include&...
    99+
    2023-06-28
  • linux怎么查看进程创建的子进程
    要查看Linux中进程创建的子进程,可以使用`ps`命令结合一些参数来实现。1. 使用`ps -ef`命令可以列出系统上所有进程的详...
    99+
    2023-09-12
    linux
  • linux中fork子进程数如何算
    在Linux中,可以使用`ulimit -u`命令来查看当前用户可创建的最大进程数。这个数值默认是系统限制的,可以通过修改`/etc...
    99+
    2023-09-11
    linux
  • 头歌(Linux之进程管理一):第2关:进程创建操作-fork
    任务描述 在上一关我们学习如何获取进程的pid信息,本关我们将介绍如何编程创建一个新的进程。 本关任务:学会使用C语言在Linux系统中使用fork系统调用创建一个新的进程。 相关知识 在Linux系统中创建进程有很多函数可以使用,其中包括...
    99+
    2023-10-21
    linux 服务器 运维
  • linux守护进程怎么创建
    这篇文章主要讲解了“linux守护进程怎么创建”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux守护进程怎么创建”吧!在linux中,守护进程也称“精灵进程”,是一个在后台运行且不受任...
    99+
    2023-06-29
  • linux中创建子进程的方式有哪些
    在Linux中,有以下几种方式可以创建子进程:1. 使用fork()系统调用:fork()系统调用会创建一个与父进程完全相同的子进程...
    99+
    2023-09-11
    linux
  • Linux进程怎么创建和启动
    本篇内容主要讲解“Linux进程怎么创建和启动”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux进程怎么创建和启动”吧!进程的类型在 Linux 中主要有两种类型的进程:前台进程(也称为交...
    99+
    2023-06-27
  • linux中怎么创建守护进程
    这期内容当中小编将会给大家带来有关linux中怎么创建守护进程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。创建子进程,父进程退出   这是编写守护进程的第一步。由于守护进程是脱离控制终端的,因此,完成第...
    99+
    2023-06-09
  • 如何创建Linux进程
    如何创建Linux进程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。下面在Linux系统中创建进程使用fork、vfork、clone这三个命令进行操作。fork  ...
    99+
    2023-06-28
  • 【Linux】Linux进程控制 --- 进程创建、终止、等待、替换、shell派生子进程的理解…
    柴犬: 你好啊,屏幕前的大帅哥or大美女,和我一起享受美好的今天叭😃😃😃 文章目录 一、进程创建1.调用fork之后,内核都做了什么?2.如何...
    99+
    2023-09-08
    linux 运维 服务器
  • 在Linux下怎么为dotnet创建守护进程
    本篇内容介绍了“在Linux下怎么为dotnet创建守护进程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是守护进程在linux或者un...
    99+
    2023-06-22
  • Linux进程创建的方法是什么
    Linux进程的创建可以通过调用fork()系统调用来实现。fork()系统调用会创建一个与父进程几乎完全相同的子进程,包括代码段、...
    99+
    2024-04-02
  • Linux系统如何创建进程
    这篇文章主要为大家展示了“Linux系统如何创建进程”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统如何创建进程”这篇文章吧。fork    fork创建一个进程...
    99+
    2023-06-28
  • Linux多线程怎么创建
    在Linux中,可以使用pthread库来创建多线程。下面是一个简单的例子:```c#include #include // 线程函...
    99+
    2023-08-16
    Linux
  • Node.js中创建子进程的方法有哪些
    这篇文章主要讲解了“Node.js中创建子进程的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Node.js中创建子进程的方法有哪些”吧!众所周知...
    99+
    2024-04-02
  • 创建子线程对Android进行网络访问
    //主线程中接收子线程发送的消息并处理 private Handler handler=new Handler(){ @SuppressLint("Handle...
    99+
    2024-04-02
  • Linux中怎么显示守护进程和子进程
    在Linux中,可以使用ps命令来显示守护进程和子进程。下面是一些常用的ps命令选项: 显示所有进程(包括守护进程和子进程): ...
    99+
    2024-04-02
  • Linux的进程是如何创建的
    在Linux中,进程是通过调用系统调用fork()或clone()来创建的。当一个进程调用fork()时,操作系统会创建一个新的子进...
    99+
    2024-04-02
  • Linux pthread线程怎么创建与使用
    本篇内容介绍了“Linux pthread线程怎么创建与使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.前言线程与进程的区别 ...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作