登 录
/* * 3-7.c * * Created on: 2011-1-7 * Author: jinyong * 僵尸进程 * 已终止运行,但尚未被清除的进程被称为僵尸进程或过度进程。 * 当使用fork函数创建子进程时,由于子进程可能比父进程晚终止,父进程终止后,子进程还没终止,此时就称子进程为僵尸进程。 * wait函数用于使父进程阻塞,直到一个子进程终止或该进程接到了一个指定的信号为止。如果该父进程没有子进程或其他子进程已 * 终止,则wait立即返回。 */ #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main(void) { pid_t pid,wpid; int status,i; pid = fork(); //调用fork函数复制进程,返回值存在变量pid中。 if(pid == 0){ printf("这是子进程,进程号是:%d/n",getpid()); sleep(5);//子进程等待5秒 exit(6);//终止子进程并返回6 } else if(pid > 0) { printf("这是父进程,正在等待子进程……/n"); wpid=wait(&status);//父进程调用wait函数,消除僵尸进程 /** * pid_t wait(int *status); * 等待子进程中断或结束 * #include <sys/types.h> * #include <sys/wait.h> * status:子进程状态 * 执行成功则返回子进程的进程号,如果发生错误则返回-1,失败原因存于errno中。 * wait()会暂停目前进程的执行,直到有信号或子进程终止 */ i=WEXITSTATUS(status); //通过整型指针status,取得子进程退出时的状态 printf("等待的进程的进程号是:%d,结束状态:%d/n",wpid,i); }else{ printf("创建进程失败/n"); } return 0; }
抱歉!评论已关闭.