【发布时间】:2020-10-04 11:45:34
【问题描述】:
我正在 GeeksForGeeks https://www.geeksforgeeks.org/signals-c-set-2/?ref=lbp 上使用 C 中的信号学习两个进程之间的通信。我试图运行网站上提供的代码。我只是将代码复制到在线 C 编译器。
// C program to implement sighup(), sigint()
// and sigquit() signal functions
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
// function declaration
void sighup();
void sigint();
void sigquit();
// driver code
void main()
{
int pid;
/* get child process */
if ((pid = fork()) < 0) {
perror("fork");
exit(1);
}
if (pid == 0) { /* child */
signal(SIGHUP, sighup);
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);
}
}
// sighup() function definition
void sighup()
{
signal(SIGHUP, sighup); /* reset signal */
printf("CHILD: I have received a SIGHUP\n");
}
// sigint() function definition
void sigint()
{
signal(SIGINT, sigint); /* reset signal */
printf("CHILD: I have received a SIGINT\n");
}
// sigquit() function definition
void sigquit()
{
printf("My DADDY has Killed me!!!\n");
exit(0);
}
然而,我得到的只是这样
PARENT: sending SIGHUP
PARENT: sending SIGINT
PARENT: sending SIGQUIT
我想知道是不是我的电脑问题?
【问题讨论】:
-
在这里工作,我无法确认任何问题(Ubuntu 20.04)。
-
我建议尝试在您的系统上运行它并确保在运行期间两个进程都存在,我认为您不应该在在线编译器中运行多个进程
-
虽然您的代码没有错,但在 POSIX 系统中,
sigaction()通常比signal()更受欢迎,因为sigaction()的语义实际上是可移植的。signal()的确切行为因实施而异。