Системный вызов Kill не работает правильно на машине ArchLinuxLinux

Ответить Пред. темаСлед. тема
Anonymous
 Системный вызов Kill не работает правильно на машине ArchLinux

Сообщение Anonymous »

Я пытаюсь использовать механизм сигнализации UNIX для выполнения некоторой обработки. Чтобы проверить эту функциональность, я написал следующий код:

Код: Выделить всё

#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);
}
}
Я компилирую этот код с помощью gcc main.c -o test. Когда я запускаю этот код на своем ноутбуке ArchLinux, я получаю следующий результат:

Код: Выделить всё

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
Как вы можете видеть, дочерний процесс не печатает никаких сообщений, когда я запускаю этот код на своем компьютере. Однако, когда я запускаю тот же код на виртуальной машине Ubuntu, я получаю следующий результат:

Код: Выделить всё

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
На моей машине установлено ядро ​​Linux v6.11.3, а на виртуальной машине — ядро ​​Linux v6.8.0. Поскольку API сигналов является частью стандарта UNIX, версия ядра не имеет значения. Тогда почему я не вижу никаких сообщений от дочернего процесса, когда запускаю код на своем компьютере?
Чтобы выяснить, в чем проблема на моем компьютере, я повторно запускал код несколько раз после закомментирования различных строк одну за другой. Похоже, проблема связана с системным вызовом kill. Если я закомментирую вызовы kill, дочерний процесс начнет печатать сообщения. Однако если мой код содержит вызовы kill, дочерний процесс ничего не выводит. Почему это происходит? Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ux-machine
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»