2.1 Linux中wait、信号 分析

wait与waitpid:

  当子进程退出的时候,内核会向父进程发送SIGCHID信号,子进程的退出是一个异步事件(子进程可以在父进程运行的任何时刻终止)。

  子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。

  父进程查询子进程的退出状态可以用wait/waitpid函数。

当我们用fork启动一个进程时,子进程就有了自己的生命,并将独立的运行,有时候,我们需要知道某个子进程是否已经结束了,可以通过wait安排父进程等待子进程结束。

wait函数原型:

  pid_t wait(&status)

status:该参数可以获得你等待子进程的信息

执行成功就会返回子进程pid。

wait系统调用会使父进程暂停执行,直到它的一个子进程结束为止。

返回的是子进程的pid,它通常是结束的子进程。

状态信息允许父进程判定子进程的退出状态,即从子进程的main函数返回的值或子进程中exit语句的退出码。

如果status不是空指针,状态信息将被写入它指向的位置。

wait获取status后检测处理:

  WIFEXITED(status)如果子进程正常结束,返回一个非零值

    WEXITSTATUS(status)如果WIFEXITED非零,返回子进程退出码

  WIFSIGNALED(status)  子进程因为捕获信号而终止,返回非零值

    WTERMSIG(status) 如果WIFSIGNALED非零,返回信号代码

  WIFSTOPPED(status) 如果子进程被暂停,返回一个非零值

    WSTOPSIG(status) 如果WIFSTOPPED非零,返回一个信号代码

猜你喜欢

转载自www.cnblogs.com/wanmeishenghuo/p/9368476.html
2.1