设立一个全局变量保存进程id,为何在另一个函数中kill的时候id号有变化

设置一个全局变量保存进程id,为何在另一个函数中kill的时候id号有变化?
定义了一个全局变量 pid_t childs_pid;
在函数test中获取子进程id号
void test(void)
{
    pid_t pid;
    char sPlay[100]="play ";
    pid = fork();
    if(pid == 0)
    {
    childs_pid = getpid();
    printf("childs_pid = %d\n",childs_pid);
    if((pid=fork())==0)
    {
        system(sPlay);
exit(0);
    }
    if (waitpid(pid, NULL, 0) != pid) 
            {   
                fprintf(stderr,"Waitpid error!\n");   
                exit(-1);   
            }
            exit(0);
}
}
打印出来得到childs_pid = 995
然后在另外一个函数stop_test中kill
void stop_test(void)
{
    pid_t pid;
    char cmd[100];
    sprintf(cmd,"kill -9 %d",childs_pid);
    printf("kill childs_pid %d\n",childs_pid);
    system(cmd);
}
打印出来的是kill childs_pid 0
为什么childs_pid发生了变化,按正常来讲childs_pid应该等于995,此处为什么变为0了?求指点
------解决方案--------------------
stop_test 不一定在 test 后被执行
------解决方案--------------------
fork了两次啊,child_pid在子进程中就是0嘛
------解决方案--------------------
在一个线程中吗,或者不同线程使用了同步手段