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

大海方舟 2014-08-18 03:52:20
定义了一个全局变量 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了?求指点
...全文
161 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
大海方舟 2014-08-19
  • 打赏
  • 举报
回复
我知道了,不同进程间通信不能用全局变量,而应该用管道之类的进程间通信手段。
zhxianbin 2014-08-18
  • 打赏
  • 举报
回复
在一个线程中吗,或者不同线程使用了同步手段
mymtom 2014-08-18
  • 打赏
  • 举报
回复
fork了两次啊,child_pid在子进程中就是0嘛
大海方舟 2014-08-18
  • 打赏
  • 举报
回复
我程序上是按顺序执行的,能肯定的是test()先执行,stop_test()后执行
zhxianbin 2014-08-18
  • 打赏
  • 举报
回复
stop_test 不一定在 test 后被执行

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧