linux c 创建进程

函数原型

pid_t fork(void);

fork的奇妙之处在于它被调用一次,却返回两次,它可能有三种不同的返回值:

1、在父进程中,fork返回新创建的子进程的PID

2、在子进程中,fork返回0;

3、如果出现错误,fork返回一个负值。

用途:

1、一个进程希望复制自身,从而父子进程能同时执行不同段的代码。

2、进程想执行另外一个程序

#include <sys/types.h>
#include <unistd.h>

int main(){
    pid_t pid;

    /*此时仅有一个进程*/
    pid = fork();

    /*此时已有两个进程在同时运行*/
    if( pid < 0)
        printf("error in fork!\n");
    else if(pid == 0)
        printf("I am the child process, ID is %d\n",getpid());
    else
        printf("I am the parent process, ID is %d\n",getpid());
    return 0;
}

在 pid = fork() 之前,只有一个进程在执行,但在这条语句之后,就变成两个进程在执行了,这两个进程共享代码段,将要执行的下一条语句就是 pid = fork() 之后的语句。两个进程中,原来就存在的那个进程被称作为”父进程”,新出现的那个进程被作为”子进程”,父子进程的区别在于进程标识符(PID)不同。

子进程的数据空间、堆栈空间都会从父进程得到一个拷贝,而不是共享。

pid_t vfork(void);

1、在父进程中,fork返回新创建的子进程的PID

2、在子进程中,fork返回0;

3、如果出现错误,fork返回一个负值。

用途:

用vfork创建的进程主要目的是用exec函数族执行另外的程序,与fork的第二个用途相同

fork 和 vfork 的区别

fork:子进程拷贝父进程的数据段,堆栈。

vfork:子进程与父进程共享数据段,堆栈。

fork:父、子进程的执行次序不确定

vfork:子进程先运行,父进程后运行

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 11:18:27

linux c 创建进程的相关文章

分析Linux内核创建一个新进程的过程

一.原理分析 1.进程的描述 进程控制块PCB——task_struct,为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_struct{ volatile long state; //进程状态,-1表示不可执行,0表示可执行,大于1表示停止 void *stack; //内核堆栈 atomic_t usage; unsigned int flags; //进程标识符 unsigned int ptrace; …… } 2.进程的创

分析Linux内核创建一个新进程的过程【转】

转自:http://www.cnblogs.com/MarkWoo/p/4420588.html 前言说明 本篇为网易云课堂Linux内核分析课程的第六周作业,本次作业我们将具体来分析fork系统调用,来分析Linux内核创建新进程的过程 关键词:fork, 系统调用,进程 *运行环境:** Ubuntu 14.04 LTS x64 gcc 4.9.2 gdb 7.8 vim 7.4 with vundle 分析 分析方法说明 PCB包含了一个进程的重要运行信息,所以我们将围绕在创建一个新进程时

第六周分析Linux内核创建一个新进程的过程

潘恒 原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  unsigned int rt_priority;实时优先级  unsigned int policy;调度策略  struct files

Linux内核分析——进程的描述和进程的创建

Linux内核分析——进程的描述和进程的创建 20135111李光豫 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验内容 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h#1235: 分析fork函数对应的内核处理过程sys_clone,理解创建一个新进

Linux间的进程通信;以及子进程的创建

1 "-----第六天-----------------------------------------------------------------------------" 2 3 1.版本控制:svn/git; 4 5 2.进程的概念: 6 1)程序和进程: 7 每个进程操作系统会为它分配 0-4G 的虚拟内存空间(32位操作系统): 其中0-3G为用户内存空间,进程可以对它进行读写操作: 3G - 4G 为系统内核空间,进程没有读写权限. 8 进程只能读写用户空间,没有权限读

Linux内核创建新进程的过程

作者:xujianguo  原创作品转载请注明出处,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ——————————————————————————————————————————————————————-———— 实验目的:  使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone ,验证您对Linux系统创建一个新进程的理解; 分析fork函数对应的内核处理过程sys_clone,理解创建

实验六———分析Linux内核创建一个新进程的过程

分析Linux内核创建一个新进程的过程 攥写人:李鹏举  学号:20132201 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ) 本周要求: 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h#1235: 分析fork函数对应的内核处理过

lab6:分析Linux内核创建一个新进程的过程

李俊锋 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验原理 1.进程的定义 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放.可以认为进程是一个程序的一次执行过程. 2.进程与程序的区别 程序时静态的,它是一些保存 在磁盘上得指令的有序集合,没有任何执行的概念. 进程是一个动态的概念,它是程序执行的过程

实验六:分析Linux内核创建一个新进程的过程

20135108 李泽源 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h#1235: 分析fork函数对应的内核处理过程sys_clone,理解创建一个新进程如何创建和修改task_struct数据结构: 使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone ,验证您对Linux系统创建一个新进程的理解,推荐在实验楼Linux虚拟机环境下完成实验. 特别