我想进行大规模磁盘传输,但这会降低系统的响应速度。
我想要的是一个 Unix 命令,它只在我闲置几分钟后才会运行命令。如果我中途回来,它会暂停工作。直到我离开电脑。
有没有这样的命令,或者软件包?
[编辑:这个问题的关键部分是如何确定是否存在控制台活动, 到自动地暂停。]
答案1
您可以通过首先获取进程 PID 来实现此目的:
ps aux | grep <process_name>
记下 PID(第二列),然后使用以下命令将其暂停:
kill -STOP <pid>
并继续:
kill -CONT <pid>
答案2
如何正常运行该命令,然后使用“nice”来降低其优先级?
答案3
我曾经写过一个“pause_io”脚本,它会接受一个数字,然后 pgrep 所有可能影响我的 IO 的东西,例如 rsync、updatedb 和 cp。然后它会 kill -STOP 这些 pid 并休眠指定的分钟数,然后 kill -CONT 每个 pid。当我需要对机器进行响应访问时,我会执行
pause_io 10 &
这样我就有 10 分钟的时间不进行繁重的 I/O
事情是这样的:
#!/bin/bash
TIMEOUT=$(($1*60))
TASKS="mlocate|updatedb|rsync|cp"
pkill $TASKS -signal STOP
sleep $TIMEOUT
pkill $TASKS -signal CONT
答案4
也许将建议的 -STOP 和 -CONT 作为某些屏幕保护程序的一部分运行?
(如果您在终端上:还有一个终端屏幕保护程序,但我不知道它的名字,也不知道在哪里设置它的选项。我只知道,它在 Ubuntu 上默认是开启的 :-)