创建一个子进程,子进程退出后,父进程捕获子进程退出的信号,然后打印子进程退出信息。kill()、raise()

发布于:2023-01-04 ⋅ 阅读:(274) ⋅ 点赞:(0)

/*===============================================
 *   文件名称:hw.c
 *   创 建 者:     
 *   创建日期:2022年08月29日
 *   描    述:
 ================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
int main(int argc, char *argv[])

    int ret;
    pid_t pid=fork();
    if(pid<0)
    {
        perror("fork");
        exit(-1);
    }
    if(pid==0)//子进程
    {
        raise(SIGSTOP);// 在子进程中使用raise()函数向自身发出SIGSTOP信号,使子进程暂停
        exit(0);//正常运行导致退出程序
    }

    else if(pid>0)//父进程
    {
        printf("pid=%d\n",pid);
        if(ret=waitpid(pid,NULL,WNOHANG|WUNTRACED)==0)/*
WNOHANG 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。若结束,则返回该子进程的ID。
WUNTRACED 若子进程进入暂停状态,则马上返回,但子进程的结束状态不予以理会。WIFSTOPPED(status)宏确定返回值是否对应与一个暂停子进程。*/

        {
            if(ret=kill(pid,SIGCHLD)==0);//捕获子进程退出信号//可以用其他的信号来测试
            printf("kill%d\n",pid);
        }
    }
    return 0;

 

测试:


网站公告

今日签到

点亮在社区的每一天
去签到