Используйте сон с минутами и секундами

Я знаю, как использовать сон 5 м в течение 5 минут.

Как я использовал бы его для, говорят 7 минут 30 секунд?

15
задан 12 August 2018 в 16:56

4 ответа

Из справочной страницы :

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

Итак:

sleep 7m 30s
32
ответ дан 23 November 2019 в 02:38

Другой способ сделать это:

sleep 7.5m

man sleep

В отличие от большинства реализаций, которые требуют, ЧИСЛО является целым числом, здесь ЧИСЛО может быть произвольным числом с плавающей точкой.

17
ответ дан 23 November 2019 в 02:38

Уже существует два превосходных ответа, но я хотел бы расшириться немного. Копия и вставка управляют ниже в Ваш терминал:

$ sleep 3d 5h 7m 30.05s &
[1] 7321

Это запустит второй процесс, который будет спать в течение 3 дней, 5 часов, 7 минут и 30,05 секунд. Идентификатор процесса (PID) 7321 в моем случае.

Подтвердить использование PID

$ ps aux | grep sleep
rick      7321  0.0  0.0  14356   660 pts/2    S    22:40   0:00 sleep 3d 5h 7m 30.05s
root     12415  0.0  0.0  14356   700 ?        S    22:41   0:00 sleep 60
rick     12500  0.0  0.0  21292   968 pts/2    R+   22:41   0:00 grep --color=auto sleep

Первая запись является той, которой мы интересуемся. Вторая запись для постоянной программы, у меня есть выполнение в запуске. Третья запись для самой команды grep.

Теперь для наблюдения, сколько времени остается (в секундах) для sleep команда сгенерирована PID 7321 мы можем использовать это: Как определить количество времени, оставленное во “сне”? команда:

$ remaining_sleep_time 7321
277304.05
$ remaining_sleep_time 7321
277296.05
$ remaining_sleep_time 7321
277262.05

Код для команды можно включать в Ваш ~/.bashrc файл:

remaining_sleep_time() { # arg: pid
  ps -o etime= -o args= -p "$1" | perl -MPOSIX -lane '
    %map = qw(d 86400 h 3600 m 60 s 1);
    $F[0] =~ /(\d+-)?(\d+:)?(\d+):(\d+)/;
    $t = -($4+60*($3+60*($2+24*$1)));
    for (@F[2..$#F]) {
      s/\?//g;
      ($n, $p) = strtod($_);
      $n *= $map{substr($_, -$p)} if $p;
      $t += $n
    }
    print $t'
}
10
ответ дан 23 November 2019 в 02:38

Сон команды всегда рассчитывает в секундах. Вы могли использовать ((7x60) +30) секунды и затем ввести просто:

сон 450

5
ответ дан 23 November 2019 в 02:38

Другие вопросы по тегам:

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