源码
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <wait.h>
#include <stdlib.h>
#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;
#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());
#if defined(SIG_TEST)
kill(getppid(), SIGUSR1);
kill(getppid(), SIGUSR2);
#endif
exit(EXIT_SUCCESS);
} else {
printf("parent proc, child_pid = %d\n", pid);
printf("parent proc, getpid = %d\n", getpid());
}
int cpid = waitpid(pid, &status, 0);
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
小结
- waitpid()等会返回子进程的pid
- wait等返回子进程的status值