2

Есть ли простой способ определить время в тиках, используя дату между сегодняшним днем и некоторым завтрашним днем .

2 ответа2

4

Вы должны быть очень осторожны при использовании временных структур ядра (тики и jiffies предназначались для использования только планировщиком для многозадачных и внутренних процессов ядра).

Linux использует jiffies, а не тики (Windows, Unix и BSD используют тики), и количество времени варьируется в зависимости от архитектуры. На платформе x86 или AMD64 Linux имеет 100 Jiffies в секунду (по умолчанию это можно изменить). Кроме того, нет никакой гарантии, что Jiffy составляет ровно 10 мс, различные факторы могут немного изменить его каждый раз, и в конечном итоге это может привести к существенной разнице.

Ситуация усложняется тем, что новейшие ядра не имеют галочек, их ядра не "просыпаются" через регулярные промежутки времени, чтобы выполнять многозадачность и все такое. Вместо этого каждый раз, когда выполняется "пробуждение", ядро выясняет, когда ему нужно проснуться в следующий раз, и назначает таймер прерывания для запуска в это время. В этих системах нет такой вещи, как галочка или пиктограмма с последовательным распределением времени.

2

Вдобавок ко всему - я посмотрел на UNIX-определение "Epoch Time", выяснил время начала и конца эпох, представляющих интерес, вычел, а затем масштабировал их до чего угодно.

Теперь, что касается вашего конкретного вопроса об использовании команды DATE(1), справочная страница UNIX для DATE(1) в Руководстве по общим командам BSD имеет следующий пример:

Наконец команда:

date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

может использоваться для анализа выходных данных по дате и выражения их во времени эпохи.

В моей системе OSX я получаю:

whmcclos@mbp:~
[3] date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
1391275286

Команда date -r seconds , вероятно, окажется полезной для проверок работоспособности со значениями времени эпохи, которые вы вычисляете:

whmcclos@mbp:~
[5] date -r 1391275286
Sat Feb  1 09:21:26 PST 2014

Вот еще один подход, который может работать для вас ...

Другой возможной реализацией для выполнения того, что вы пытаетесь сделать, была бы команда UNIX at , предполагая, что эти виды фоновых заданий выполняются, пока ваш вариант xNIX "спит". В моей системе OSX кажется, что команды, указанные с командой at , выполняются даже тогда, когда OSX "спит" - у меня действительно включен "power nap", если это как-то связано с этим, но я предлагаю вам рассмотреть:

Во-первых, в OSX команда at по умолчанию отключена, поэтому я сначала включил ее в соответствии со справочной страницей ATRUN(8) следующим образом:

Execute the following command as root to enable at run:

    launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Затем я сделал тест сна следующим образом:

[61] date
Sat Feb  1 11:10:17 PST 2014
whmcclos@mbp:~
[62] at 11:11am today
touch $HOME/created-at-11:11am
job 9 at Sat Feb  1 11:11:00 2014
whmcclos@mbp:~
[63] date
Sat Feb  1 11:10:40 PST 2014

в этот момент я уложил свой ноутбук OSX в сон, пошел на кухню и сделал салат, вернулся и вот результаты:

whmcclos@mbp:~
[64] echo "awakened now"; date
awakened now
Sat Feb  1 11:15:59 PST 2014
whmcclos@mbp:~
[65] ls -l ~/created-at-11\:11am
-rw-r--r--+ 1 whmcclos staff 0 Feb  1 11:11 /Users/whmcclos/created-at-11:11am

Таким образом, это может быть возможно , что реализация вашего конкретного at команде позволит то , что вы пытаетесь сделать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .