stat's
вывод является меткой времени Unix, также названной секундами с Эпохи.
Весь GNU coreutils, которые принимают дату, позволяет Вам помещать метку времени вместо этого путем добавления префикса метки времени @
.
Так попробуйте это
touch -d @$ORIGTS $f
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:
Через волшебный ключ SysRq - обычно Alt+SysRq+K (виртуальный терминал) или BreakK (последовательная консоль). Это не Ваш случай, когда Вы уже попытались отключить волшебный SysRq echo 0 > /proc/sys/kernel/sysrq
и отправка последовательности BreakK случайно является невероятной.
Через определенное сочетание клавиш (виртуальный терминал) или сигнал прерывания (последовательная консоль). Доступностью 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
для других возможностей.
Мне удалось решить вопрос с помощью ответа pabouk. Основанное на коде решение, которое я наконец обнаружил, который позволяет SAK
флаг, который будет установлен/сброшен на последовательном порте при открытии использующий пространство пользователя, которым API может быть найден на stackoverflow здесь, Как я могу отключить опцию SAK последовательного порта на Linux с помощью пространства пользователя API?
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:57strace
Я вижу, что никакой ioctl () не называет промежуток моими вызовамиopen
иioctl
использованиеTIOCGSERIAL
. Это действительно появляется это любойopen
вызов устанавливает SAK, или что busybox реализацияsetserial
не работает правильно. Когда я открываюсь/dev/ttyS0
ASYNC_SAK
бит, конечно, установлен. – mathematician1975 02.07.2013, 14:19