您需要以某种方式添加同步,或者在fork()之前调用signal().
使用当前代码,您无法确保子进程在接收到信号之前先调用signal().在处理指令之前接收信号将停止子进程.
例:
#include
#include
#include
#include
static int received = 0;
void readUsual(int sig)
{
if (sig == SIGUSR1)
{
received = 1;
}
}
int main()
{
signal(SIGUSR1,readUsual);
pid_t pid2 = fork();
if (pid2 < 0)
printf("Can't create child process
");
else if (pid2==0)
{
printf("Process2, pid=%d
",getpid());
while (!received)
;
printf("SIGUSR1 received.
");
}
else
{
kill(pid2,SIGUSR1);
printf("%s
","Proccess1 end");
while (1)
;
}
return 0;
}
使用此代码的输出示例:
Process1 end
Process2, pid=1397
SIGUSR1 received