当前位置: 技术问答>linux和unix
设置一个全局变量保存进程id,为何在另一个函数中kill的时候id号有变化?
来源: 互联网 发布时间:2017-05-26
本文导语: 定义了一个全局变量 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 = %dn...
定义了一个全局变量 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 = %dn",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 %dn",childs_pid);
system(cmd);
}
打印出来的是kill childs_pid 0
为什么childs_pid发生了变化,按正常来讲childs_pid应该等于995,此处为什么变为0了?求指点
在函数test中获取子进程id号
void test(void)
{
pid_t pid;
char sPlay[100]="play ";
pid = fork();
if(pid == 0)
{
childs_pid = getpid();
printf("childs_pid = %dn",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 %dn",childs_pid);
system(cmd);
}
打印出来的是kill childs_pid 0
为什么childs_pid发生了变化,按正常来讲childs_pid应该等于995,此处为什么变为0了?求指点
|
在一个线程中吗,或者不同线程使用了同步手段
|
stop_test 不一定在 test 后被执行
|
fork了两次啊,child_pid在子进程中就是0嘛