`

Linux进程

 
阅读更多

 

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

int main()
{
    pid_t child_pid;
    child_pid = fork();	

    if (child_pid < 0) 
        printf("Error occured on forking./n");
    else if (child_pid == 0) { 
        /*子进程工作*/
        printf("child process PID:%d\n", (int)getpid());
        exit(0);
    } else {
        /*父进程工作*/
        printf("parent process PID:%d\n", (int)getpid());
        sleep(30);
        exit(0);
    }
}

 

#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>

int main()
{
    pid_t child_pid, release_pid;
    child_pid = fork();	

    if (child_pid < 0) 
        printf("Error occured on forking./n");
    else if (child_pid == 0) { 
        /*子进程工作*/
        printf("child process PID:%d\n", (int)getpid());
        exit(0);
    } else {
        /*父进程工作*/
        release_pid = wait(NULL);
        printf("parent process PID:%d\n", (int)getpid());
        printf("I catched a child process with PID of:%d\n", release_pid);
        sleep(30);
        exit(0);
    }
}

 

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>

void handler(int num)
{
    int status;
    int pid = waitpid(-1, &status, WNOHANG);
    if (WIFEXITED(status)) 
        printf("The child %d exit with code %d\n", pid, WEXITSTATUS(status));
}

int main()
{
    pid_t child_pid;
    child_pid = fork();	

    signal(SIGCHLD, handler);

    if (child_pid < 0) 
        printf("Error occured on forking./n");
    else if (child_pid == 0) { 
        /*子进程工作*/
        printf("child process PID:%d\n", (int)getpid());
        exit(3);
    } else {
        /*父进程工作*/
        printf("parent process PID:%d\n", (int)getpid());
        int i;
        for (i = 0; i < 5; i++)
        {
            printf("do parent thing\n");
            sleep(3);
        }
        exit(0);
    }
}

 

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>

int main()
{
    pid_t child_pid, grandson_pid;
    child_pid = fork();	

    if (child_pid < 0) 
        printf("Error occured on forking./n");
    else if (child_pid == 0) { 
        /*子进程*/
        grandson_pid = fork(); //创建孙进程
        if (child_pid < 0) 
            printf("Error occured on forking./n");
        else if (grandson_pid > 0)
        {
            printf("child process PID:%d\n", (int)getpid());
            exit(0); //子进程退出,孙进程由init领养
        } else {
            /*孙进程工作*/
            printf("grandson process PID:%d\n", (int)getpid());
            sleep(2);
            exit(0); //孙进程退出,init会为孙进程收尸
        }

    } else {
        /*父进程工作*/
        waitpid(child_pid, NULL, 0);//回收子进程
        printf("parent process PID:%d\n", (int)getpid());
        sleep(30);
        exit(0);
    }
}

 

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>

int main()
{
    pid_t child_pid;
    child_pid = fork();
	
    signal(SIGCHLD, SIG_IGN);

    if (child_pid < 0) 
        printf("Error occured on forking./n");
    else if (child_pid == 0) { 
        /*子进程工作*/
        printf("child process PID:%d\n", (int)getpid());
        exit(0);
    } else {
        /*父进程工作*/
        printf("parent process PID:%d\n", (int)getpid());
        sleep(30);
        exit(0);
    }
}

 

 

分享到:
评论

相关推荐

    Linux进程的睡眠和唤醒

    1 Linux进程的睡眠和唤醒 在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为TASK_RUNNING。一旦一个运行中的进程时间片用完, Linux 内核的调度器会剥夺这个...

    Linux进程间通讯视频教程

    本教程通过6个视频,深入浅出地讲解了Linux进程间通信的关键概念和技术。 首先,我们来了解一下什么是进程间通信。在Linux系统中,进程是程序的一次执行实例,每个进程都有自己的独立内存空间,因此它们之间的数据...

    操作系统实验报告(LINUX进程间通信)

    操作系统实验报告(LINUX进程间通信) 操作系统实验报告(LINUX进程间通信)是操作系统课程的一部分,涵盖了Linux进程间通信的原理和应用,包括消息队列、C/S结构等内容。下面将对这些知识点进行详细的解释。 一、...

    实验 Linux进程通信的参考答案

    实验 Linux 进程通信的参考答案 Linux 进程通信是指在操作系统中,多个进程之间进行数据交换和同步的机制。在 Linux 中,进程通信可以通过信号、管道和共享内存等方式实现。 一、信号机制 在 Linux 中,信号是一...

    Linux进程调度算法分析

    Linux 进程调度算法分析 基于 X86 平台 Linux2.6.26 内核进程调度部分代码,刨析 Linux 进程调度算法,对算法的原理,实现和复杂度进行了分析并提出了算法改进措施。 Linux 进程调度概述: Linux 系统支持用户态...

    Unix/linux进程池管理

    在Unix/Linux系统中,...综上所述,Unix/Linux进程池管理涉及多方面的技术,包括进程创建、任务调度、进程间通信、资源管理和错误处理。理解并掌握这些知识点对于开发高效、稳定的银行系统或其他服务型应用至关重要。

    linux进程间通信与同步.pdf

    ### Linux进程间通信与同步详解 #### 一、概述 在多任务操作系统中,进程间通信与同步机制是解决进程间数据交换与资源共享的关键技术。这些机制确保了多个并发运行的任务能够有效地协作,并且避免了资源冲突。对于...

    Linux进程基本管理与进程控制

    Linux 进程基本管理与进程控制 Linux 进程基本管理是计算机操作系统中一个非常重要的概念,它涉及到进程的创建、管理和控制。在 Linux 环境下,进程是操作系统中一个基本的执行单元,每个进程都有其自己的虚拟地址...

    Linux进程调度策略分析

    ### Linux进程调度策略分析 #### 1. 前言 Linux系统因其开源特性与卓越性能,在服务器领域占据主导地位。作为多任务操作系统的核心组成部分,进程调度机制对于系统的整体性能和响应时间至关重要。本文旨在深入探讨...

    UNIX Linux实验教程 4实验四Linux进程间通信.doc

    UNIX/Linux 进程间通信实验教程 UNIX/Linux 操作系统提供了一组系统调用作为用户使用其进程间通信机制的接口。进程间通信是指在多任务计算机系统中,每个进程都具有自己独立的全局变量和局部变量,子进程几乎完全...

    Linux进程调度器的设计--Linux进程的管理与调度(十七) - 嵌入式Linux中文站1

    Linux进程调度器的设计是操作系统核心中的重要组成部分,其主要任务是高效、公平地分配CPU时间给系统中的各个进程,以确保系统的响应速度和整体性能。本文将深入探讨Linux进程调度器的基本原理、进程分类及其对应的...

    LINUX进程管理实验

    ### LINUX进程管理实验知识点解析 #### 一、进程与程序的区别 在进行LINUX进程管理实验之前,首先需要理解进程与程序之间的区别。程序是指令的集合,是静态的,而进程则是程序的一次动态执行过程,具有生命周期,...

    linux进程编程介绍

    对于开发者而言,深入理解Linux进程编程是提升技术水平的重要一环。本文将详细探讨Linux进程编程的基础知识,包括进程的概念、创建与管理进程、进程间通信以及线程的使用。 首先,我们需要了解什么是进程。在操作...

    linux进程源代码分析

    ### Linux进程源代码分析 #### 0. 引言 近年来,随着开源软件运动的兴起,Linux作为一种开放源码的操作系统,在技术社区中获得了广泛的关注和发展。Linux的开放性不仅促进了其自身的发展,也为广大开发者提供了...

    linux进程间通信ppt

    【Linux进程间通信】是操作系统中进程协作的重要方式,它允许不同的进程共享数据和资源,协同完成任务。在Linux系统中,进程间通信(IPC,Inter-Process Communication)包括多种技术,如管道、信号、信号量、共享...

    Linux进程间通信.pdf

    ### Linux进程间通信详解 #### 引言 在现代操作系统如Linux中,进程间通信(IPC,Inter-Process Communication)是实现多进程协同工作的重要机制。通过IPC,不同进程能够共享信息、同步状态以及协作完成复杂的任务...

    linux进程控制详解及演示代码

    本文将深入探讨Linux进程控制,包括进程通信、同步与异步的概念,并提供相关的演示代码。 首先,我们来理解什么是进程通信。在多进程环境中,进程间的通信(IPC, Inter-Process Communication)是必不可少的,它...

    Linux进程调度程序剖析.pdf

    Linux进程调度程序剖析 Linux 进程调度程序剖析是 Linux 操作系统的核心组件之一,负责管理和调度系统中的进程。Linux 采用简单的基于优先级策略来完成对进程的调度工作。由于 Linux 采用了底半处理策略,因此进程...

    Linux 进程管理命令

    Linux 进程管理命令 Linux 进程管理命令是 Linux 操作系统中用于管理进程的命令,它们是 Linux 系统管理员的基本工具。这些命令可以用来查看、管理和控制进程,从而确保系统的稳定运行。 1. 程序和进程 在 Linux ...

Global site tag (gtag.js) - Google Analytics