进程

作者: 如果听见下雨的声音 | 来源:发表于2020-04-21 13:49 被阅读0次

创建子进程

#include <cstdio>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <wait.h>

void create_task()
{
    int ret;

    ret = fork();

    if (ret < 0)
    {
        perror("Cant't create child task.\n");

    } else if (ret > 0)
    {
        int chpid = ret;

        int ppid = getpid();

        printf("Parent pid = %d \n", ppid);

    } else if (ret == 0)
    {

        printf("Child pid = %d \n", getpid());

    }

}

循环创建N个子进程

#include <cstdio>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <wait.h>

void create_task()
{
    int ret;

    ret = fork();

    if (ret < 0)
    {
        perror("Cant't create child task.\n");

    } else if (ret > 0)
    {
        int chpid = ret;

        int ppid = getpid();

        printf("Parent pid = %d \n", ppid);

    } else if (ret == 0)
    {

        printf("Child pid = %d \n", getpid());

    }

}

回收子进程

#include <cstdio>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <wait.h>

void recycle_child_task()
{

    const int N = 5;

    int childPidSet[N];

    int i = 0;

    for (; i < N; i++)
    {
        int ret = fork();

        if (ret == 0)
            break;

        childPidSet[i] = ret;
    }


    if (i == N)
        for (const int &pid : childPidSet)
            printf("Child pid=%d\n", pid);


    if (i == N)
        for (const int &pid: childPidSet)
        {
            int stat;

            waitpid(pid, &stat, 0);

            printf("Recycle child pid %d\n", pid);

        }


}

守护进程

#include <cstdio>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <wait.h>

void create_daemon_task()
{
    pid_t pid, sid;

    pid = fork();

    if (pid > 0)
        exit(0);

    setsid();

    if (chdir("/tmp"))
    {
        perror("Change dir error");

        exit(1);
    }

    umask(0002);

    close(STDIN_FILENO);

    open("/dev/null", O_RDWR);

    dup2(0, STDOUT_FILENO);

    dup2(0, STDERR_FILENO);

    int count = 0;

    while (1)
    {
        count++;

        write(STDOUT_FILENO, &count, sizeof(count));

        sleep(1);

    }

}

相关文章

  • 进程,进程,进程

    1. 进程是具有独立功能的程序关于某个数据集合的一次运行过程。(1)程序本身是静态的,是没有生命周期的,只有运行起...

  • Linux回收子进程

    孤儿进程 孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程...

  • Android 五种进程的管理

    安卓有几种进程? 前台进程 可见进程 服务进程 后台进程 空进程 前台进程 用户当前操作所必需的进程。如果一个进程...

  • 孤儿进程、僵尸进程与进程回收

    孤儿进程与僵尸进程 孤儿进程:父亲死了,子进程被init进程领养僵尸进程:子进程死了,父进程没有回收子进程的资源(...

  • 第三章 进程管理

    进程基础 进程基本概念 进程组:只包括祖先进程,子孙进程,兄弟进程进程树:所有进程僵尸进程:在父进程中经常会调用w...

  • Chaprter-1 [进程]

    进程模型 进程定义 进程的创建 进程的终止 进程的层次结构 进程的状态 进程的状态图 进程的实现

  • 进程操作

    一、进程创建 进程树 父进程创建若干子进程,子进程再创建其子进程,依次类推,构成进程树。进程的调度,其实就是在进程...

  • 进程管理(一)进程操作

    进程创建 、进程执行映像和加载、进程运行(进程调度)、进程间的互斥与同步、进程间通信、进程终止 1、进程创建 PC...

  • python中的僵尸进程和孤儿进程

    孤儿进程:父进程退出,子进程还在运行的这些子进程都是孤儿进程,孤儿进程将被 init 进程(进程号为 1)所收养,...

  • 容器中的孤儿进程&僵尸进程简介

    背景简介 孤儿进程 父进程先于子进程退出,那么子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)接管,并...

网友评论

      本文标题:进程

      本文链接:https://www.haomeiwen.com/subject/rneuihtx.html