📄 test11.c
字号:
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/wait.h>#include <string.h>#include <errno.h>#include <unistd.h>void process_signal(int sig);void child_process_main(void);int main(int argc, char **argv){ int status; fprintf(stdout, "SIGCHLD = %d\n", SIGCHLD); fprintf(stdout, "SIGTERM = %d\n", SIGTERM); // void (*signal(int sig, void (*func)(int)))(int); signal(SIGCHLD, process_signal); //signal(SIGTERM, process_signal); //signal(SIGINT, process_signal); //signal(7, process_signal); //signal(SIGCHLD, process_signal); //sleep(1000); pid_t pid; if ((pid = fork()) < 0) { fprintf(stderr, "fork() failed: %s\n", strerror(errno)); return 1; } else if (pid == 0) { child_process_main(); exit(0); } else { // parent process, continue }#if 0 pid_t returned_pid; returned_pid = wait(&status); fprintf(stdout, "returned_pid = %d, error: %s\n", returned_pid, strerror(errno));#endif sleep(1000); return 0;}void child_process_main(void){ sleep(1); fprintf(stdout, "I'm child process, pid = %d\n", getpid());}void process_signal(int sig){ printf("Catched %d signal.\n", sig); int status; if (sig == SIGCHLD) { pid_t returned_pid; returned_pid = wait(&status); fprintf(stdout, "%d process is exited.\n", returned_pid); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -