孤儿进程
父进程先死,子进程托孤给一号进程
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(void) { pid_t pid; pid = fork(); if(-1 == pid) { return 0; } if(0 == pid) { sleep(100); } if(pid > 0) { ; } return 0; }
僵死进程
子进程先死,父进程还没有来得及收尸
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(void) { pid_t pid; pid = fork(); if(-1 == pid) { return 0; } if(0 == pid) { } if(pid > 0) { sleep(100); } return 0; }
避免僵死进程
创建子进程的时候可以不管子进程,让Linux内核去管
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> int main(void) { pid_t pid; pid = fork(); // 通过信号注册函数,忽略子进程死的信号 signal(SIGCHLD, SIG_IGN); if(-1 == pid) { return 0; } if(0 == pid) { } if(pid > 0) { sleep(100); } return 0; }
当父子进程共享文件描述符情况
两个fd指向同一块内存
因为两个进程共享了文件指针偏移量,所以都能向文件中写数据
信号:异步处理事件,是一种机制
我们的程序在顺序执行的同时,能支持异步的调用信号处理函数
时间: 2024-10-11 17:15:58