在给定目录中的给定超时之后的centos自动终止进程

时间:2014-06-03 15:19:58

标签: bash process centos sh kill

我想创建一个脚本 - bash - shell脚本(我不太清楚它需要什么)到CentOS(我的Apache服务器的VM)并杀死所有正在运行的进程在给定超时后的指定文件夹(及其子文件夹)上。 任何人都可以帮我这个吗?

例如,我想在超时文件夹用户的所有进程后终止。

# ps -fC java
UID        PID  PPID  C STIME TTY          TIME CMD
root     27549     1  0 Apr18 ?        09:21:48 /usr/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-7.0.52/conf/logging.properties -Djava.util.logging.manager
root     29060 27549  1 23:25 ?        00:00:00 java -cp /opt/apache-tomcat-7.0.52/webapps/ROOT/users/test/HelloWorld
root     29161 27549  5 23:25 ?        00:00:00 java -cp /opt/apache-tomcat-7.0.52/webapps/ROOT/users/test/HelloWorld
root     29176 27549  5 23:25 ?        00:00:00 java -cp /opt/apache-tomcat-7.0.52/webapps/ROOT/users/test/HelloWorld
root     29186 27549  5 23:25 ?        00:00:00 java -cp /opt/apache-tomcat-7.0.52/webapps/ROOT/users/test/HelloWorld
root     29206 27549 12 23:25 ?        00:00:00 java -cp /opt/apache-tomcat-7.0.52/webapps/ROOT/users/test/HelloWorld
root     29216 27549 12 23:25 ?        00:00:00 java -cp /opt/apache-tomcat-7.0.52/webapps/ROOT/users/test/HelloWorld

1 个答案:

答案 0 :(得分:0)

您的第一种方法(在启动流程时设置timeout)更为正确,并且通常比创建搜索活动流程的脚本更安全。如果有其他类似的过程必须保持活力,甚至更多。

如果您的系统中安装了GNU utils,则可以使用timeout。尝试从shell提示符

date ; timeout 2 sleep 10 ; date

你将看到2秒后进程睡眠被杀死。如果命令超时,并且未设置--preserve-status,则它将以状态124退出。否则,它将退出,状态为COMMAND。 (请参阅man timeoutinfo coreutils timeout以获取完整参考。请注意,默认情况下,时间以秒为单位。)

如果您尚未安装GNU工具,则可以安装它们或使用具有类似语法的expect

如果您仍然想要使用研究和杀死脚本进行挑战,则必须确保该进程的选择规则将为kill。您也可以从ps aux | grep YOURPATTERN |grep -v grep | awk '{print $2}'开始获取可以操作的PID列表...

YOURPATTERN是您放置选择规则的地方,grep -v grep是排除grep本身的过程,在awk您也可以指定命令(例如awk '{print "kill "$1}' })并将输出传递给shell ...