任务完成后如何关闭计算机?

El *_*rro 34 shutdown command-line

我通常在上学之前开始下载。
在完成特定任务后,我应该使用哪个命令来自动进行必要的保存并关闭计算机?
(例如,安装更新后,或下载大文件后。)

我也在askubuntu交叉发布。

pbm*_*pbm 27

这取决于你开始的任务。如果它是一些命令行工具,您可以简单地运行haltshutdown -h now

  1. wget http://..../somelargefile; halt-halt将在之后执行wget

  2. wget http://..../somelargefile && halt-halt如果wget没有返回错误将被执行

  3. wget http://..../somelargefile || halt-halt如果wget返回错误将被执行

替代方法是使用kshutdown- 在此应用程序中,您可以指定应执行的操作(重新启动/关机/休眠/等或命令执行)和时间(一段时间后或另一个应用程序退出时)。如果您想使用此工具,您需要选择正确的进程 - 一些更新实用程序会启动几个子进程。

关机

  • 你也可以给 `shutdown` 一个等待时间;无需为此目的使用 kshutdown。 (4认同)

moo*_*eep 24

每个进程在proc文件系统中都有一个根据其进程 ID (pid) 命名的目录。因此,您可以通过检查其目录是否重复存在来等待特定进程的终止。

您可以使用它在进程终止后执行系统关闭,如下所示(用 pid 替换 2296 以等待):

su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'
Run Code Online (Sandbox Code Playgroud)

好处:

  • 可以在关闭shell命令后决定是否关闭
  • 关闭以 root 身份发出,等待的命令不一定以 root 身份完成(无需解决后期sudo-password 提示)。

缺点:

  • 可能会发生您的进程终止,然后操作系统在该秒内为新生成的进程重用相同的 pid(竞争条件)。因此,您将继续等待该新进程终止。

  • 要点:即使进程已经开始,这也有效。 (2认同)

Gil*_*not 7

如果您想监视已经启动的进程,您可以在中执行此操作:

# while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now
Run Code Online (Sandbox Code Playgroud)


Tok*_*Tok 3

您可以使用&&||运算符将命令链接在一起。例如:

apt-get update && sleep 2 && init 0
Run Code Online (Sandbox Code Playgroud)

这将使用 aptitude 对系统执行更新,等待 2 秒,然后转到运行级别 0,具体取决于您的系统,这可能会或可能不会实际关闭硬件电源。

要在更任意的操作(例如可能是 Web 浏览器)下载之后进行一个或多个操作,您将需要额外的逻辑来监视下载文件以验证下载实际上已完成,但是 shell 逻辑未更改。