Chinaunix

标题: 父进程如何通知所有子进程做一件事? [打印本页]

作者: hackmong    时间: 2015-03-10 19:58
标题: 父进程如何通知所有子进程做一件事?
如题。父进程如何通知所有子进程做一件事?
作者: zsszss0000    时间: 2015-03-10 20:01
各种进程间通讯方法,信号等等回复 1# hackmong


   
作者: tsh185    时间: 2015-03-10 20:18
1: 父进程肯定知道子进程的 pid
2: 一个简单的方法 kill(子进程pid, SIGUSR1);
3: 子进程处理 SIGUSR1 信号

当然还要其他很多方法
作者: hackmong    时间: 2015-03-10 22:30
谢谢!我按照你的建议写了个程序,但是出错,能麻烦帮忙看下吗?
  1. FILE *fq;

  2. void  handler(int sig)
  3. {
  4.        fq = fopen("/home/lee/www","a");
  5.        fprintf(fq,"Here!!!\n");
  6.        fclose(fq);
  7.        //exit(0);
  8. }

  9. int main()
  10. {
  11.        pid_t pid = fork();
  12.        if(pid<0)
  13.        {
  14.             printf("error\n");
  15.        }
  16.        else if(pid == 0)
  17.         {
  18.                signal(SIGUSR1 , handler);
  19.                for(;;);
  20.         }
  21.         else
  22.         {
  23.               if(kill(pid,SIGUSR1)==0)
  24.               {
  25.               }
  26.         }
  27.         return  0;
  28. }
复制代码
回复 3# tsh185


   
作者: hackmong    时间: 2015-03-10 22:32
谢谢!我写了个信号的程序,但是回调函数没有执行,不知出错在哪,能麻烦帮忙看下吗?
  1. FILE *fq;

  2. void  handler(int sig)
  3. {
  4.        fq = fopen("/home/lee/www","a");
  5.        fprintf(fq,"Here!!!\n");
  6.        fclose(fq);
  7.        //exit(0);
  8. }

  9. int main()
  10. {
  11.        pid_t pid = fork();
  12.        if(pid<0)
  13.        {
  14.             printf("error\n");
  15.        }
  16.        else if(pid == 0)
  17.         {
  18.                signal(SIGUSR1 , handler);
  19.                for(;;);
  20.         }
  21.         else
  22.         {
  23.               if(kill(pid,SIGUSR1)==0)
  24.               {
  25.               }
  26.         }
  27.         return  0;
  28. }
复制代码
回复 2# zsszss0000


   
作者: action08    时间: 2015-03-10 22:33
看你代码,不知道你想要干啥,api基础还不够啊
作者: windoze    时间: 2015-03-10 23:31
man fork
如果没看明白就使劲看,直到看明白为止,然后写一篇不少于800字的读后感发过来。
作者: hackmong    时间: 2015-03-11 10:36
回复 7# windoze


    可不可以麻烦说下我具体哪里出错……
作者: www1862    时间: 2015-03-11 12:21
调用fuck()之后,系统先运行芭比还是北鼻是无法确定的,所以北鼻还没运行,就可能被芭比给塞回妈咪的肚子里了。
作者: hackmong    时间: 2015-03-11 12:28
回复 9# www1862


    我知道了,谢谢!
作者: flw    时间: 2015-03-11 12:45
kill( 0, SIGUSR1 );
作者: windoze    时间: 2015-03-11 13:01
回复 8# hackmong

不可以。
你要先看完man fork然后写完读后感我再告诉你。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2