初学Linux IPC,多指教。。。
接触Linux编程一个月的样子,照着Linux编程入门到精通在学,现学到了IPC机制。ipc过了一遍了,感觉有的繁,里面的结构有点多,有点理不清头绪。准备再探。如果有对Linux IPC熟悉的,请给点意见。如,学这个东西需要注意的地方,重点要掌握的地方之类的。如果可以的话,可以分享自身成功的经验,有问题的也可以提出来一起学习。。。
下面是我学进程时遗留下来的问题,如果可以也给我一并解决了吧(我就发了三个帖子,之前两个都是这个问题,还没解决彻底)
- C/C++ code
pid_t pid; void handle(int signo){ /*****************************问题所在************************************************* *多执行几次pid会出现不同的结果0,或者子进程的pid *一个是fork返回到子进程的值,一个是返回到父进程的值 *问题:这个函数是父进程执行的,pid不应该是fork返回到父进程的值么,为什么可能为0呢??? *请各位指教。 ****************************************************************************************/ printf("Current time:%d\n",pid); kill(pid,SIGUSR1); } int main(){; int i; int stat; signal(SIGCLD,SIG_IGN); signal(SIGUSR1,SIG_IGN); signal(SIGUSR2,handle); pid=fork(); if(pid<0){ perror("fork"); exit(-1); } else if(pid==0){ kill(getppid(),SIGUSR2); pause(); exit(0); } wait(&stat); return 0; }
是父子进程都用同一个信号处理程序引起的
1. 不与实际的项目相结合,只是单纯地从书本上抄些例子, 是很难掌握其要领的。
2.
fork是调用一次,两次返回,pid你定义成全局,可有可能是子进程pid或0
是不返回两次,试验一下就知道了
在定义一个全局变量g_tmpPid;
- C/C++ code
else if((g_tmpPid = pid)==0){
kill(getppid(),SIGUSR2);
pause();
exit(0);
}static void handle(int signo){
printf("Current time:%d\n",g_tmpPid);
kill(pid,SIGUSR1);
}