全部学习汇总: https:///GreyZhang/little_bits_of_linux
前面简单用了一下wait函数,暂时看到了它对父进程的阻塞效果。关于wait函数,其原型如下:
int wait(int *status)
返回值:返回值是一个int类型,如果成功则返回子进程的pid,如果失败返回值是-1。
传入参数: int指针类型,指向一个int存储区域用于存储子进程返回时候的状态。
这里我自己写的题目标识是进阶,自然只是我自己能力的一个进阶,对于很多人来说可能是一个常识了。大概看了一下资料,我觉得wait能够掌握或者用得恰到好处的话需要熟悉几个相关的宏。
WIFEXITED(status)如果是0,表示程序是正常结束的。如果这个是true,可以通过WEXITSTATUS(status)来获取退出时候的状态。WIFSIGNALED(status)为非0 表明进程异常终止,如果这个为非零,也就是true的时候可以通过WTERMSIG(status)来获取退出信号的编号。WIFSTOPPED(status)如果是true,表示进程处于暂停状态,可以通过WSTOPSIG(status)来获取使得进程进入暂停状态的信号编号。WIFCONTINUED(status) 非0表示暂停后已经继续运行。
上面的这段解释,大概知道了wait的一些其他的用法。不过,似乎要理解得更加深入一点,我还得继续学习信号,这个是下一步的计划了。
接下来,做一个简单的程序调试,为了能够看到上面的这些信息,先写一个用于解析输出状态的函数如下:

编写测试代码如下:


代码编译运行效果:

其实,关于第二个信号id我还是有一些疑惑的,我采用的这段测试代码是仿照被人的代码写的。但是我发现,其实状态不赋值,仅仅做一个除零操作出现的信号id其实是不同的,暂且还不熟悉信号的机制,不知道这个是否是一个正常的状态。
关于上面的这个疑惑,修改代码:

只需要79行改成80行,编译运行效果:

这次返回的信号id不再是8而是6,这是一个后面需要弄明白的问题。
















