我通常在去学校之前开始下载。
我应该使用哪个命令来自动进行必要的保存并在完成特定任务后关闭计算机?
(例如,安装更新后或下载大文件后。)
我还交叉发帖于阿库本图。
答案1
这取决于你开始的任务。如果它是一些命令行工具,您可以简单地运行halt
或shutdown -h now
:
wget http://..../somelargefile; halt
-halt
将在之后执行wget
wget http://..../somelargefile && halt
-如果没有返回错误halt
则执行wget
wget http://..../somelargefile || halt
-如果返回错误halt
则执行wget
替代方法是使用kshutdown
- 在此应用程序中,您可以指定应执行哪些操作(重新启动/关闭/休眠/等或命令执行)以及何时执行(一段时间后或另一个应用程序退出时)。如果您想使用此工具,您需要选择正确的进程 - 某些更新实用程序会启动几个子进程。
答案2
每个进程在文件系统中都有一个根据其进程 ID (pid) 命名的目录proc
。因此,您可以通过重复检查其目录是否存在来等待特定进程的终止。
您可以使用它在进程终止后执行系统关闭,如下所示(将 2296 替换为要等待的 pid):
su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'
优点:
- 关闭shell命令后可以决定是否关闭
- 关闭是作为 root 发出的,等待的命令不一定是作为 root 执行的(无需解决后期
sudo
-password 提示)。
缺点:
- 您的进程可能会终止,然后操作系统会在该秒内为新生成的进程重用相同的 pid(竞争条件)。因此,您将继续等待该新进程终止。
答案3
如果你想监控一个已经启动的进程,你可以在壳:
# while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now
答案4
有一个名为 Sentinella 的应用程序可以通过其 GUI 为您完成此操作:
安装它:
sudo aptitude update
sudo aptitude install sentinella