【c】fork & signal demo

文章目录

源码

#include <stdio.h>
#include <signal.h>         // kill()
#include <unistd.h>         // fork()
#include <wait.h>           // wait()
#include <stdlib.h>         // EXIT_SUCCESS

#define SIG_TEST

#if defined(SIG_TEST)
void sign_user(int num){
    if (SIGUSR1 == num) {
        printf("SIG_TEST : signal user 1\n");
    } else if (SIGUSR2 == num) {
        printf("SIG_TEST : signal user 2\n");
    }
}
#endif

int main(){

    int pid = fork();
    int status = 0; /* status */
#if defined(SIG_TEST)
    signal(SIGUSR1, sign_user);
    signal(SIGUSR2, sign_user);
#endif

    if (pid < 0){
        printf("fork error \n");
        return 0;
    } else if (pid == 0){
        printf("child proc, getppid = %d\n", getppid()); /* get parent pid */
#if defined(SIG_TEST)
        kill(getppid(), SIGUSR1);
        kill(getppid(), SIGUSR2);
#endif
        exit(EXIT_SUCCESS);/* return status */
    } else {
        printf("parent proc, child_pid = %d\n", pid);
        printf("parent proc, getpid    = %d\n", getpid());
    }

    //int cpid = wait(&status);
    int cpid = waitpid(pid, &status, 0); /* return child pid */
    printf("cpid   = %d\n", cpid    );
    printf("status = %d\n", status  );

    return 0;
}



log

parent proc, child_pid = 27931
parent proc, getpid    = 27930
child proc, getppid = 27930
SIG_TEST : signal user 2
SIG_TEST : signal user 1
cpid   = 27931
status = 0

小结

  1. waitpid()等会返回子进程的pid
  2. wait等返回子进程的status值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过得精彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值