fork创建进程使用

1.fork创建进程的使用

 fork()返回值等于0时,表示创建子进程;

fork()返回值大于0时,是主进程;

#include<stdio.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<signal.h>

void sig_handler(int signo)
{
    printf("child process %d stop\n", signo);
    //wait(0);

}
void out(int n)
{
    int i = 0;
    for(i = 0; i < n; ++i)
    {
        printf("%d:%d out %d\n", getpid(), i);
        sleep(1);
    }
}
int main(void)
{
    if (signal(SIGCHLD, sig_handler) == SIG_ERR)
    {
        perror("sigchld error");
        exit(1);
    }

    pid_t pid = fork();
    if(pid < 0)
    {
        perror("fork error");
        exit(1);
    }
    else if(pid > 0)
    {
        out(100);
    }
    else
    {
        out(20);
    }

    return 0;
}

原文地址:https://www.cnblogs.com/weiyouqing/p/12708191.html

时间: 2024-11-08 17:50:04

fork创建进程使用的相关文章

linux中fork创建进程讲解(转)

大家知道Linux中创建子进程的一个很好的方法是函数调用fork,但是很多初学者对fork的理解上可能有点困难.我们举个例子来看看fork的用法吧. 大家用fork的时候记住fork是“分叉”的意思就很好理解了. 记得初学fork() 函数及遇到这个函数时,总是不能理解fork为什么会这样写,就会分成父子两个进程.    先看一下fork() 的经典模式 //--------------------------------------------------------beginint pid=

linux创建进程fork的方法步骤

fork创建进程 函数原型如下 #include// 必须引入头文件,使用fork函数的时候,必须包含这个头文件,否则,系统找不到fork函数 pid_t fork(void); //void代表没有任何形式参数 父进程与子进程 1.掌握概念,什么是父进程,什么是子进程 除了0号进程(系统创建的)之外,linux系统中都是由其他进程创建的.创建新进程的进程,即调用fork函数的进程为父进程,新建的进程为子进程. 2.fork函数不需要任何参数,对于返回值有三种情况 1)对于父进程,fork函数返

利用fork循环创建进程

我们知道,fork可以创建子进程,那么如果循环调用fork,进程之间会有什么关系呢? 得到结果: 从结果上分析,一共有4个进程,6132,6133,6134,6135,它们的关系是怎样的呢? 按道理来讲,刚开始i=0,只有一个进程6132,fork后,产生子进程6133.6132执行完printf后,i++.在fork后,6132作为父进程,产生子进程6134.而6133作为i=0时的子进程,执行完printf后,i++,此时6133作为父进程,产生子进程6135. 结果却和所想有些出入,为什么

Linux c进程管理—创建进程 system、execl、execlp、fork

Linux c 进程管理:   1.      创建进程:        system函数:         int system(const char*filename);                                                  建立独立进程,拥有独立的代码空间,内存空间                                                  等待新的进程执行完毕,system才返回.(阻塞)          system:

创建进程的函数

clone().fork().vfork()都是Linux的系统调用. 进程一般由代码段.数据段和PCB进程控制块组成. fork 创造的子进程复制了父亲进程的资源,包括内存的内容task_struct内容,新旧进程使用同一代码段,复制数据段和堆栈段,这里的复制采用了注明的copy_on_write技术,即一旦子进程开始运行,则新旧进程的地址空间已经分开,两者运行独立. 优点是子进程的执行独立于父进程,具有良好的并发性. 缺点是两者的通信需要专门的通信机制,如pipe.fifo和system V

一起talk C栗子吧(第一百三十三回:C语言实例--创建进程时的内存细节)

各位看官们,大家好,上一回中咱们说的是从内存角度看进程和线程的例子,这一回咱们说的例子是:创建进程时的内存细节.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们都知道使用fork函数可以创建一个新的进程,今天我们一起说一下使用该函数创建进程时内存的一些细节问题.我们介绍的的重点还是内存布局中的四个分区. 1.在父进程中使用fork时,会创建一个新的进程,我们叫它子进程,子进程有自己的内存空间: 2.子进程的内存空间中没有代码区,子进程和父进程共享代码区: 3.子进程的内存空间中拥

【归纳总结】Unix/linux下的进程管理(二):创建进程的函数及其应用、对比

创建进程的函数fork().vfork()和execl() 本次内容主要介绍Unix/linux下2个创建进程的函数fork和vfork以及它们的差别. 1.fork函数 (1)函数的格式 #include <unistd.h> pid_t fork(void); 函数功能: 主要用于以复制正在运行进程的方式来创建新的进程,其中新进程叫做子进程,正在运行的进程叫做父进程. 返回值: 函数调用成功时,父进程返回子进程的PID,子进程返回0,函数调用出错时,父进程返回-1,子进程没有被创建. 注意

Python并发进程—multiprocessing 模块创建进程

multiprocessing 模块创建进程 进程创建方法 1.流程特点[1] 将需要子进程执行的事件封装为函数[2] 通过模块的Process类创建进程对象,关联函数[3] 可以通过进程对象设置进程信息及属性[4] 通过进程对象调用start启动进程[5] 通过进程对象调用join回收进程 2.基本接口使用 Process() 功能 : 创建进程对象 参数 : target 绑定要执行的目标函数 rgs 元组,用于给target函数位置传参 kwargs 字典,给target函数键值传参 p.

操作系统第2次实验报告:创建进程

个人信息 姓名:郑楚杭 学号:201821121009 班级:计算1811 一.实验目的 熟练Linux创建进程fork操作. 二.实验内容 在服务器上用VIM编写一个程序:一个进程创建两个子进程. 查看进程树 查看进程相关信息 三.实验报告 1. 编写程序 2. 打印进程树 编译1的程序并运行: 打印进程树: 3. 解读进程相关信息 (1) ps -ef UID PID PPID C STIME TTY TIME CMD zhengch+ 31795 31794 0 23:29 pts/4 0