我想创建一个脚本 - 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
答案 0 :(得分:0)
您的第一种方法(在启动流程时设置timeout
)更为正确,并且通常比创建搜索活动流程的脚本更安全。如果有其他类似的过程必须保持活力,甚至更多。
如果您的系统中安装了GNU
utils,则可以使用timeout
。尝试从shell提示符
date ; timeout 2 sleep 10 ; date
你将看到2秒后进程睡眠被杀死。如果命令超时,并且未设置--preserve-status,则它将以状态124退出。否则,它将退出,状态为COMMAND。 (请参阅man timeout
或info 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 ...