Câu trả lời:
Từ trang hướng dẫn :
Đưa ra hai hoặc nhiều đối số, tạm dừng trong khoảng thời gian được chỉ định bằng tổng giá trị của chúng .
Vì thế:
sleep 7m 30s
bash
và GNU sleep
. POSIXly, sleep
chỉ được yêu cầu hiểu số nguyên dưới dạng giây
Có hai câu trả lời xuất sắc nhưng tôi muốn mở rộng một chút. Sao chép và dán lệnh bên dưới vào thiết bị đầu cuối của bạn:
$ sleep 3d 5h 7m 30.05s &
[1] 7321
Điều này sẽ bắt đầu một quá trình thứ hai sẽ ngủ trong 3 ngày, 5 giờ, 7 phút và 30,05 giây. ID tiến trình (PID) là 7321
trong trường hợp của tôi.
Để xác nhận việc sử dụng 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
Mục đầu tiên là mục chúng tôi quan tâm. Mục thứ hai dành cho chương trình vĩnh viễn tôi đang chạy khi khởi động. Mục thứ ba là cho chính lệnh grep.
Bây giờ để xem bao nhiêu thời gian còn lại (tính bằng giây) cho sleep
lệnh được tạo bởi PID, 7321
chúng ta có thể sử dụng điều này: Làm thế nào để xác định lượng thời gian còn lại trong một giấc ngủ ngủ trưa? chỉ huy:
$ remaining_sleep_time 7321
277304.05
$ remaining_sleep_time 7321
277296.05
$ remaining_sleep_time 7321
277262.05
Mã cho lệnh bạn có thể bao gồm trong ~/.bashrc
tệp của mình :
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'
}
remaining_sleep_time
cần được sao chép vào ~/.bashrc
tệp của bạn theo liên kết. Bạn cũng có thể đặt mã vào tệp bash script.
Lệnh ngủ luôn được tính bằng giây. Bạn có thể sử dụng ((7x60) +30) giây và sau đó nhập đơn giản:
ngủ 450
sleep $((60*7))
có thể được sử dụng trong vài phút