![为什么“关机”不能以秒为参数?](https://linux22.com/image/177795/%E4%B8%BA%E4%BB%80%E4%B9%88%E2%80%9C%E5%85%B3%E6%9C%BA%E2%80%9D%E4%B8%8D%E8%83%BD%E4%BB%A5%E7%A7%92%E4%B8%BA%E5%8F%82%E6%95%B0%EF%BC%9F.png)
该shutdown
命令只能以分钟和小时为单位设置计时器,但不能以秒为单位,这让我感到惊讶。
来自手册页
时间字符串可以采用“hh:mm”格式,表示小时/分钟,指定执行关闭的时间,以 24 小时时钟格式指定。或者,它可以采用语法“+m”,指的是从现在开始的指定分钟数 m。 “now”是“+0”的别名,即触发立即关闭。如果未指定时间参数,则隐含“+1”。
我尝试做的是在我的窗口管理器(qtile)中创建一个按钮。用鼠标左键按下此按钮后,我想在 5 秒内关闭我的计算机,但如果我错过了单击,我想用鼠标右键单击该按钮并取消此操作。
sleep 5; shutdown now
如果我想取消的话就不行。
有没有办法让取消工作?也许有一些类似关闭的程序具有秒精度?
答案1
遵循安迪·道尔顿的建议(请参阅问题中的评论)是执行此操作的最佳方法。
但如果你真的想要一个程序来做到这一点,那么编写它很容易:
int main(void) { sleep(5); system("shutdown -h now"); }
如果你把它放进去secondsshutdown.c
并用它编译它gcc secondsshutdown.c -o secondsshutdown
应该可以做你想要的。
(可以增强此代码,以便在编译时不再出现警告或确保它接受选项。我在这里没有这样做,以便它变得更易于阅读)