在Linux/Unix 中 wait 一般用在,用户主程序调用 fork 产生一个新的进程后,等待子进程执行完毕。在标准的 Unix 中 wait 的头文件定义为:
#include <sys/wait.h>
pid_t wait(int *statloc);
在Linux 中,定义为:
/*come from /usr/include/sys/wait.h
Wait for a child to die. When one does, put its status in *STAT_LOC ....
*/
extert __pid_t wait (__WAIT_STATUS __stat_loc);
也就是wait 的参数类型为 int 的指针类型。
以下为一段程序。
在Ubuntu10.4 下的结果如下:
main pid is 1754,my ppid is 1265
child pid is 1755,my ppid is 1754
I will wait
no proecss waited
Wait返回的PID值为-1,也就是父进程,没有等待到子进程的结束。
把@1出的变量s1修改为:int s1。并在@2和@3中作相应的改动。
程序如下:
同样在 在Ubuntu10.4 下的结果如下:
main pid is 1774,my ppid is 1265
child pid is 1775,my ppid is 1774
I will wait
my pid is 1774,waited pid is 1775,s1= 0
这里父进程ID为1774,子进程ID为1775,并准确等待到了子进程的结束。
原因:
如果一个函数的参数为指针,比如int f(int *p),则p的实参可以定义为,int * p 或者是 int p;
如果是前者在调用时用f(p),如果是后者在调用时,利用f(&p);都可以。
在这里为什么不一样,大家说一说?