Код: Выделить всё
#include
#include
#include
#include
#include
void handler(int sig)
{
printf("Received %d signal in %d!\n", sig, getpid());
if(sig == SIGUSR2)
exit(0);
signal(sig, handler);
}
int main()
{
pid_t child = fork();
if(child == 0)
{
// Child process
while(1)
{
signal(SIGUSR1, handler);
signal(SIGUSR2, handler);
pause();
}
}
else
{
// Parent Process
for(int i = 0; i < 10; i++)
{
printf("Sending SIGUSR1 signal to %d\n", child);
kill(child, SIGUSR1);
sleep(1);
}
printf("Sending SIGTERM signal\n");
kill(child, SIGTERM);
wait(NULL);
}
}
Код: Выделить всё
Sending SIGUSR1 signal to 212965
Sending SIGUSR1 signal to 212965
Sending SIGUSR1 signal to 212965
Sending SIGUSR1 signal to 212965
Sending SIGUSR1 signal to 212965
Sending SIGUSR1 signal to 212965
Sending SIGUSR1 signal to 212965
Sending SIGUSR1 signal to 212965
Sending SIGUSR1 signal to 212965
Sending SIGUSR1 signal to 212965
Sending SIGTERM signal
Код: Выделить всё
Sending SIGUSR1 signal to 1153
Received 10 signal in 1153!
Sending SIGUSR1 signal to 1153
Received 10 signal in 1153!
Sending SIGUSR1 signal to 1153
Received 10 signal in 1153!
Sending SIGUSR1 signal to 1153
Received 10 signal in 1153!
Sending SIGUSR1 signal to 1153
Received 10 signal in 1153!
Sending SIGUSR1 signal to 1153
Received 10 signal in 1153!
Sending SIGUSR1 signal to 1153
Received 10 signal in 1153!
Sending SIGUSR1 signal to 1153
Received 10 signal in 1153!
Sending SIGUSR1 signal to 1153
Received 10 signal in 1153!
Sending SIGUSR1 signal to 1153
Received 10 signal in 1153!
Sending SIGTERM signal
Чтобы выяснить, в чем проблема на моем компьютере, я повторно запускал код несколько раз после закомментирования различных строк одну за другой. Похоже, проблема связана с системным вызовом kill. Если я закомментирую вызовы kill, дочерний процесс начнет печатать сообщения. Однако если мой код содержит вызовы kill, дочерний процесс ничего не выводит. Почему это происходит? Что я делаю не так?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ux-machine