当我以其他用户身份注销、关闭或重新启动计算机时,有时我会收到此消息
一些程序仍在运行
节目列表
等待程序完成。中断这些程序可能会导致您丢失工作
ubuntu 有没有办法在关闭之前自动检测这些程序是否已完成任务?我知道有些程序可能崩溃了。但其他一些程序,如乌班图系统关闭前可能需要一些额外的时间来同步
给你,这是解析输出。我不知道可以用它做什么,但我很高兴看到一些魔法!
martin@ubuntu-desktop:~$ u1sdtool --status
State: QUEUE_MANAGER
connection: With User With Network
description: processing the commands pool
is_connected: True
is_error: False
is_online: True
queues: IDDLE
守护进程同步时的唯一区别是最后一行可以变成
queues: WORKING
或者
queues: WORKING_ON_BOTH
答案1
我不确定这是否很好,你能想象在关机前必须同步 1Gb 的文件吗?将关闭信号发送给程序以便它们可以退出,如果还有进一步的工作,那么可以在再次启动后恢复,这不是更有意义吗?
即使是 Windows,在强制关闭程序之前也只允许 30 秒的时间。
我真的不明白这有什么用!如果我下令关机,我希望尽快关闭并启动它,而不是等待程序执行我不知道的事情。毕竟,启动关机是我的责任,我应该知道什么时候是合适的时间。
编辑(阅读下面的所有评论!):
这是检查 UbuntuOne 当前状态并仅当状态为空闲时关闭的脚本。
#! /bin/bash
gracetime_given=false
while true; do
u1sdtool_status=$(u1sdtool --status | grep -o 'queues: IDLE')
timestamp=$(date +%H:%M:%S)
if [ "$u1sdtool_status" = "queues: WORKING" -o "$u1sdtool_status" = "queues: WORKING_ON_BOTH" ]; then
echo "$timestamp - UbuntuOne has not finished sync, waiting for conclusion."
echo "Re-checking in 30 seconds."
gracetime_given=false
sleep 30
elif [ "$u1sdtool_status" = "queues: IDLE" ]; then
if [ $gracetime_given = false ]; then
echo "u1sdtools seems to be idle at the moment..."
echo "Giving u1sdtool some grace time, rechecking in 10 seconds."
gracetime_given=true
sleep 10
else
echo "This is where you shutdown!!!"
sleep 5
sudo shutdown -h now
fi
else
echo "Something is really wrong!!!"
break
fi
done
要使用它,您需要在终端上执行以下操作,您需要使用sudo visudo
并在文件末尾添加此行,<yourusername> hostname=NOPASSWD: /sbin/shutdown -h now
这样就不需要密码来使用帐户关闭计算机。
之后,您需要将脚本保存到任何地方(),您需要使用chmod 755 <nameofthescript.sh>
它来使其可执行。
然后你就可以运行脚本并看看它是如何工作的:
- 获取 UbuntuOne 的当前状态
- 如果不是空闲,则每 30 秒重新检查一次是否空闲
- 如果空闲,将再等待 10 秒,然后重新检查状态是否仍然空闲
- 如果它仍然空闲,它将使用以下方式关闭
shutdown -h now
希望这有效,并且您可以随意对代码进行评论,只要您明白这实际上是我的第一个 bash 脚本!
Gl 和 hf ;)
答案2
当您退出 gnome-session 时会出现一个对话框,并且有些应用程序就是不退出,但我不记得它是否允许您推迟关机直到某个进程完成。我不认为它允许,但我认为添加它应该不太难。
正如其他人指出的那样,您可以等待一段时间或直到某个时间点再关闭系统。您还可以做的另一件事是为此编写自定义脚本,但如果有人为此编写了应用程序,我并不感到惊讶。