回收子进程函数--wait、waitpid

    技术2024-05-06  88

    wait回收子进程

    函数原型 int status; pid wait(&status);

    功能

    阻塞等待子进程回收子进程资源返回子进程结束状态

    参数 status为传出参数,保存子进程结束的信息(结束的原因,例如正常结束、异常中断…)

    返回值 回收成功返回进程pid,失败返回-1

    关于wait函数的补充 有以下几个宏函数

    int WIFEXITED(int status)若返回值非0,即正常退出 WEXITSTATUS(int status)若上函数非0,即子进程正常结束–>获取进程退出状态(exit的参数)int WIFSIGNALED(int status) 若返回值非0,即异常退出 WTERMSIG(int status) 若上函数非0,即子进程异常退出–>获取异常退出状态(kill -l可以查看到所有中断状态)WSTOPPED(int status)若返回值非0,即进程处于暂停状态 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> int main(void) { pid_t pid,wpid; int status; pid = fork(); if(pid==0){ printf("----child, my parent = %d, going to sleep\n",getppid()); sleep(10); printf("--------child die---------------\n"); }else if(pid>0){ //sleep(2); wpid=wait(&status); if(wpid==-1){ perror("wait error:"); exit(1); }else{ if(WIFEXITED(status)) printf("child exits with:%d\n",WEXITSTATUS(status)); if(WIFSIGNALED(status)) printf("child was killed with:%d\n", WTERMSIG(status)); } printf("I'm parent, my pid =%d\n",getpid()); } return 0; }

    waitpid函数

    函数原型 waitpid(int pid, int status, int option)

    参数

    pid:> 0,指定pid回收 = -1,回收任意子进程 = 0,回收本组任意子进程 < -1,回收该进程组的任意子进程status:同wait函数option:= 0,阻塞回收(跟wait一样) WNOHANG,非阻塞回收

    返回值 回收成功返回pid,失败-1 option为WNOHANG,且子进程未结束时返回0

    Processed: 0.013, SQL: 9