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


25

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

我也交叉张贴在askubuntu上

Answers:


25

这取决于您开始的任务。如果是某些命令行工具,则可以直接运行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-在此应用中,您可以指定应执行的操作(重新启动/关机/休眠/等或命令执行)以及何时(在一段时间后或另一个应用程序退出时)。如果要使用此工具,则需要选择正确的过程-一些更新实用程序启动了几个子过程。

关机


4
您也可以花一点shutdown时间等待;无需为此使用kshutdown。
卡斯卡贝尔

1
不,但是shutdown没有任何等待实际事件的方法。
2011年

18

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

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

su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'

好处:

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

缺点:

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

2
要点:即使进程已开始,此操作也有效。
海森堡2014年

如果您从某个终端启动了某个东西,而您仍然ps在那个终端上打开了该终端,则应该可以帮助您找到CMD的PID。如果该进程是/正在另一个终端中,则通过grep将ps输出的所有内容通过grep过滤以过滤您的命令,应该可以帮助您找到它ps -elf | grep <command_related_word>
TafT 2015年

更好地根据pgrepaka process grep检查我的答案...
Gilles Quenot 18/10/15

我怎样才能将此命令置于后台?
德威

1
@DerWeh将其包装在shell脚本中,并按照此处提供的步骤进行操作:stackoverflow.com/q/625409/1025391
moooeeeep

3

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

apt-get update && sleep 2 && init 0

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

要在更随意的操作(例如,大概是Web浏览器)之后与一个或多个操作进行对话,您将需要其他逻辑来监视下载文件,以验证下载是否实际上已完成,但是shell逻辑不变。



1

有一个名为sentinella的应用程序,可以使用其GUI为您完成此操作: 哨兵

安装它:

sudo aptitude update
sudo aptitude install sentinella
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.