子进程无法正常工作

标签 c process fork

我尝试了此网站的示例:http://www.cs.cf.ac.uk/Dave/C/node24.html 有时,输出不会显示来自子进程的消息。 我试图理解为什么?有人可以帮忙吗?

#include <stdio.h>
#include <signal.h>

void sighup(); /* routines child will call upon sigtrap */
void sigint();
void sigquit();

main()
{ int pid;

  /* get child process */

   if ((pid = fork()) < 0) {
        perror("fork");
        exit(1);
    }

   if (pid == 0)
     { /* child */
       signal(SIGHUP,sighup); /* set function calls */
       signal(SIGINT,sigint);
       signal(SIGQUIT, sigquit);
       for(;;); /* loop for ever */
     }
  else /* parent */
     {  /* pid hold id of child */
       printf("\nPARENT: sending SIGHUP\n\n");
       kill(pid,SIGHUP);
       sleep(3); /* pause for 3 secs */
       printf("\nPARENT: sending SIGINT\n\n");
       kill(pid,SIGINT);
       sleep(3); /* pause for 3 secs */
       printf("\nPARENT: sending SIGQUIT\n\n");
       kill(pid,SIGQUIT);
       sleep(3);
     }
}

void sighup()

{  signal(SIGHUP,sighup); /* reset signal */
   printf("CHILD: I have received a SIGHUP\n");
}

void sigint()

{  signal(SIGINT,sigint); /* reset signal */
   printf("CHILD: I have received a SIGINT\n");
}

void sigquit()

{ printf("My DADDY has Killed me!!!\n");
  exit(0);
}

最佳答案

因为有时父进程会在子进程运行之前被安排,有时反之亦然。如果 child 在传递信号时尚未设置处理程序,您将看不到消息。

关于子进程无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4263006/

相关文章:

为进程创建 n 个子进程

c# - ApplicationPool 用户与 StartInfo.Username?

c - execvp 没有将参数传递给被调用的程序

c - 为什么 GNOME 不使用 C99?

C 约定 - 将 H 文件添加到项目文件

将一个字符串复制到另一个

C: 用 scanf fork

c - 1. 将 N 秒捕获的数据包保存到一个 pcap 文件中 & 2. 从 Wireshark 中的程序打印输出

perl - 确保只有一个 Perl 程序实例正在运行的最佳方法是什么?

ruby - Ruby 2.2 中的垃圾收集器引发意想不到的 CoW