Мне нужно, чтобы fork
два дочерних процесса. Можно получить сигнал 3, распечатать hello
и отправить сигнал 4 другому дочернему процессу; Другой может получить сигнал 4, напечатать world
и отправить сигнал 3 в первый дочерний процесс.
Для начала процесс отца отправит сигнал 3 в первый дочерний процесс после сна в течение 3 секунд.
Затем через 3 секунды процесс отца отправит SIGKILL
, чтобы убить их обоих.
вилка и сигнал: как отправлять сигналы от родительского процесса к конкретному дочернему процессу
Я не знаю, как отправлять сигналы на определенный дочерний процесс (я знал, что у нас есть функция kill
для отправки сигналов, но я не знаю, чтобы использовать его здесь).
Вот мой код:
#include <stdio.h>
#include <signal.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
void func(int n)
{
printf("ping\n");
// how to send signal 4 to the second process?
}
void func2(int n)
{
printf("pong\n");
// how to send signal 3 to the first process?
}
int main()
{
pid_t pid;
int i;
for(i = 0; i < 2; i++)
{
pid = fork();
if(pid == 0)
{
if(i == 0)
{
signal(3, func);
}
else
{
signal(4, func2);
}
while(1);
}
else
{
if(i == 1)
{
sleep(3);
// how to send signal 3 to the first child process?
sleep(3);
// how to kill the two children?
}
}
}
return 0;
}
Неопределенное поведение для вызова 'printf()' в контексте сигнала. – EOF
http: // man7.org/linux/man-pages/man2/kill.2.html – alk
@EOF Что делать? – Yves