0
我正试图从parrent进程向子进程发送一个用户定义的(SIGUSR1或SIGUSR2)信号。子进程接收到信号后,会等待5秒钟,并将另一个用户定义的信号发送给parrent进程。当parrent进程接收到信号时,它会向屏幕写入一个字符串。我不知道如何做到这一点。我正试图在Linux终端上做到这一点。这里是我的代码:在父进程和子进程之间发送信号
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void wait_function(int signal_1)
{
signal(SIGUSR1,wait_function);
if(signal_1==SIGUSR1)
{
sleep(5);
}
}
void writeSomethingOnScreen(int signal_2)
{
signal(SIGUSR2,createAndWrite);
if(signal_2==SIGUSR2)
{
printf("Hello Stackoverflow!");
}
}
main()
{
pid_t pid;
pid=fork();
if(pid==0)/*child*/
{
signal(SIGUSR1,wait_function);
pause();
kill(getppid(),SIGUSR2);
exit(254);
}
if(pid>0)/*parent*/
{
signal(SIGUSR2,writeSomethingOnScreen);
kill(pid,SIGUSR1);
}
}
重建信号处理程序中的信号处理程序是一个错误,我没有注意到这一点。 printf只是一个例子,我将在那里进行文件处理。我是unix编码新手,你的答案是正确的,但我不知道该怎么做。你能发送一个示例代码吗? – Curious
'printf只是一个例子,我将在那里进行文件处理.'看起来像一个坏主意:文件处理不能使用任何printf()函数,malloc/free(和其他几个)。除此之外,还有一个更好的设计是保持信号处理器的轻量级:设置标志或写入管道并返回到原始流程。 – wildplasser