Отправить сигнал от родительского процесса на ребенка в C
Мой детский процесс не может начать работать. Мне нужно передать сигнал и выполнить readUsual
функция.
Это небольшой кусок кода:
int main()
{
pid_t pid2 = fork();
if (pid2 < 0)
printf("Can't create child process\n");
else if (pid2==0)
{
//this block never execute
printf("Process2, pid=%d\n",getpid());
signal(SIGUSR1,readUsual);
}
else
{
kill(pid2,SIGUSR1);
printf("%s\n","Proccess1 end");
for(;;);
}
return 0;
}
1 ответ
Решение
Вам нужно либо каким-то образом добавить синхронизацию, либо вызвать signal()
до вашего fork()
,
С вашим текущим кодом вы не можете быть уверены, что вызов дочернего процесса signal()
прежде чем он получит сигнал. Получение сигнала перед инструкцией по его обработке остановит дочерний процесс.
Пример:
#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
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\n");
else if (pid2==0)
{
printf("Process2, pid=%d\n",getpid());
while (!received)
;
printf("SIGUSR1 received.\n");
}
else
{
kill(pid2,SIGUSR1);
printf("%s\n","Proccess1 end");
while (1)
;
}
return 0;
}
Пример вывода с этим кодом:
Process1 end
Process2, pid=1397
SIGUSR1 received