Linux进程

本文详细介绍了进程管理的基本概念,包括子进程创建、父子进程间通信、进程回收及信号处理机制。通过实例展示了fork、wait、signal等关键函数的应用,深入探讨了Linux环境下进程与信号的交互与管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#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);
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值