【发布时间】:2018-02-05 21:41:33
【问题描述】:
对于在 Bash 中给定超时后终止进程,有一个很好的命令称为timeout。但是,我在多用户服务器上运行我的程序,我不希望我的程序的性能受到其他人的影响。有没有办法在程序真正运行一段时间后杀死 Bash 中的进程?
【问题讨论】:
对于在 Bash 中给定超时后终止进程,有一个很好的命令称为timeout。但是,我在多用户服务器上运行我的程序,我不希望我的程序的性能受到其他人的影响。有没有办法在程序真正运行一段时间后杀死 Bash 中的进程?
【问题讨论】:
在 Bash+Linux 上,您可以使用 ulimit -t。这里来自help ulimit:
-t the maximum amount of cpu time in seconds
这是一个例子:
$ time bash -c 'ulimit -t 5; while true; do true; done'
Killed
real 0m8.549s
user 0m4.983s
sys 0m0.008s
无限循环进程在被终止之前被调度(即实际运行)总共 5 秒。由于其他进程同时竞争 CPU,这需要 8.5 秒的 wall time。
像sleep 3600 这样的命令永远不会被杀死,因为它不使用任何 CPU 时间。
【讨论】: