Мой процесс был уничтожен, но я не могу понять уведомление ядра

stat's вывод является меткой времени Unix, также названной секундами с Эпохи.

Весь GNU coreutils, которые принимают дату, позволяет Вам помещать метку времени вместо этого путем добавления префикса метки времени @.

Так попробуйте это

touch -d @$ORIGTS $f

См. coreutils - Секунды с эпохи

6
20.03.2019, 14:34
2 ответа

SAK в этом случае действительно означает Безопасный Ключ Внимания. Сообщение, которое Вы видите, является сообщением ядра, определенным в drivers/tty/tty_io.c. SAK является сочетанием клавиш, которое гарантирует безопасный вход в систему для пользователя на консоли. На Linux SAK гарантирует, что это путем уничтожения всех процессов, присоединенных к терминальному SAK, вызывается на. Это ожидается это init затем перезапустит доверяемый процесс входа в систему как getty сопровождаемый login или X-сервер с менеджером по оформлению.

Перечисленными PIDs является действительно PIDs потоков Вашего приложения CX_SC3 которые были уничтожены SAK.

fd#n opened to the tty средства, что процесс/поток, который был уничтожен, имел дескриптор файла n открытый терминалу, на который был вызван SAK.

В Linux существует два способа вызов SAK:

  1. Через волшебный ключ SysRq - обычно Alt+SysRq+K (виртуальный терминал) или BreakK (последовательная консоль). Это не Ваш случай, когда Вы уже попытались отключить волшебный SysRq echo 0 > /proc/sys/kernel/sysrq и отправка последовательности BreakK случайно является невероятной.

  2. Через определенное сочетание клавиш (виртуальный терминал) или сигнал прерывания (последовательная консоль). Доступностью SAK на последовательной консоли управляют setserial.

Сигнал прерывания на последовательной линии является непрерывной отправкой интервала значений за время дольше, чем время отправки символа (включая запуск, стоповые биты и биты четности). В Вас случай очень вероятно, что условие Сигнала прерывания появляется во время завершения работы Вашей хост-машины. Попытайтесь выключить SAK на своем последовательном порте на целевом устройстве setserial:

setserial /dev/ttyS0 ^sak

Можно проверить состояние функциональности SAK на последовательном порте setserial -g /dev/ttyS0. При включении это покажет SAK после Flags:. Для автоматической установки опции после начальной загрузки видят сценарии запуска, которые в системах BusyBox обычно являются /etc/init.d/rcS и /etc/rc.d/S* или проверьте /etc/inittab для других возможностей.

8
27.01.2020, 20:23
  • 1
    для Вашего ответа - это очень полезно. К сожалению, когда мое приложение открывает последовательный порт, sak, который я просто отключил, повторно включен. Я должен устанавливать конкретную комбинацию флага, которая повторно включает SAK на/dev/ttys0 –  mathematician1975 01.07.2013, 12:17
  • 2
    мне наконец удалось найти основанное на коде решение и я отправил его на stackoverflow. Я добавлю этот ответ здесь, но я приму Ваш ответ, поскольку это позволило мне определить как и почему из всего этого. Большое спасибо –  mathematician1975 01.07.2013, 12:56
  • 3
    Добро пожаловать! К сожалению, я не могу добавить комментарии нигде кроме моего ответа. Сделал Вы проверяете ioctl(fd, TIOCGSERIAL, &s_serial) сразу после open() это open() действительно включает SAK? Для меня это походит на ошибку. Вы могли запустить свое приложение с strace видеть, не скрыт ли там/пропущен ioctl() звонить где-нибудь? Полезный должен также работать catch syscall ioctl в gdb. Это заставляет программу останавливаться на всех ioct() syscalls. Можно исследовать аргументы путем печати регистров и сложить даже без символов. en.wikipedia.org/wiki/X86_calling_conventions –  pabouk 01.07.2013, 23:57
  • 4
    @mathematician1975 я забыл обращаться к Вам в комментарии выше. –  pabouk 02.07.2013, 11:49
  • 5
    На выполнении strace Я вижу, что никакой ioctl () не называет промежуток моими вызовами open и ioctl использование TIOCGSERIAL . Это действительно появляется это любой open вызов устанавливает SAK, или что busybox реализация setserial не работает правильно. Когда я открываюсь /dev/ttyS0 ASYNC_SAK бит, конечно, установлен. –  mathematician1975 02.07.2013, 14:19

Мне удалось решить вопрос с помощью ответа pabouk. Основанное на коде решение, которое я наконец обнаружил, который позволяет SAK флаг, который будет установлен/сброшен на последовательном порте при открытии использующий пространство пользователя, которым API может быть найден на stackoverflow здесь, Как я могу отключить опцию SAK последовательного порта на Linux с помощью пространства пользователя API?

4
27.01.2020, 20:23

Теги

Похожие вопросы