- 浏览: 286812 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
cheetah_ysc:
不错不错,我喜欢!
Java固定时间间隔执行 -
voyage_mh:
阿选百度竟然一下可以吧你百度出来
使用DWR注解Annotation
当点击启动的时候,会调用后台的代码(当然会传一个参数过去)
public String start() { String appName=(String)paramMap.get("appName"); if (appName!=null){ String masHome=System.getenv("ADS_HOME"); String appCmd=null; String appPath=null; if (appName.equals("AlarmMain")){ appPath=masHome+"/bin/alarm"; appCmd=appPath+"/alarm.sh"; } try { if (appCmd!=null){ ProcessBuilder pb=new ProcessBuilder(appCmd); pb.directory(new File(appPath)); pb.start(); logger.debug( "用户:" + getLoginUserName()+" 启动模块:"+appName); Thread.sleep(2000); } } catch (Exception e) { logger.warn(StringUtil.getStackTrace(e)); } } return "redirect:list"; }
这样后台就会启动一个进程执行一个命令appCmd,这样就执行了alarm.sh的shell脚本
cd ${ADS_HOME}/bin/alarm source ../setenv.sh nohup java -DADS_HOME=$ADS_HOME com/listong/ads/alarm/AlarmMain applicationContext.xml alarm.conf >/dev/null & echo $! >${ADS_HOME}/bin/alarm/server.pid
又会执行setenv.sh的脚本,此脚本是用于添加运行环境什么的
export LANG=zh_CN export JAVA_HOME=/usr/java/jdk1.6.0_16 ADS_HOME=/data/ads export ADS_HOME #echo $ADS_HOME LIBPATH=${ADS_HOME}/lib #echo $LIBPATH for file in ${LIBPATH}/*.jar; do #echo $file; CLASSPATH=$CLASSPATH:$file done DISTPATH=${ADS_HOME}/dist for file in ${DISTPATH}/*.jar; do #echo $file; CLASSPATH=$CLASSPATH:$file done export CLASSPATH #echo $CLASSPATH export LD_LIBRARY_PATH=/usr/local/lib export PATH=$PATH:${JAVA_HOME}/bin
执行完后会跳到list方法去
public String list() {
List<PsInfo> pidList=new ArrayList();
String appNames[]={"AlarmMain"};
for (int i=0;i<appNames.length;i++){
PsInfo pi=PsUtil.getPsInfo(appNames[i]);
if (pi==null){
pi=getZeroPsInfo(appNames[i]);
}
pidList.add(pi);
}
storeInRequest("pidList", pidList);
return "pidlist.jsp";
}
然后执行PsUtil的getPsInfo的方法,这样就可以获得linux下的进程的信息包括pid也就是进程号,获得之后存起来。
package com.listong.ads.util.tool;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PsUtil {
private static final Logger logger = LoggerFactory.getLogger(PsUtil.class);
public static void main(String[] args) {
ProcessBuilder pb = new ProcessBuilder("/data/mas/bin/sms/sms.sh");
// Map env = pb.environment();
// env.put("key1", "value1");
// env.remove("key2");
// env.put("key2", env.get("key1") + "_test");
pb.directory(new File("/data/mas/bin/sms")); // 设置工作目录
try {
Process p = pb.start();
} catch (IOException e) {
e.printStackTrace();
} // 建立子进程
/*
String str=getPsStr(args[0]);
System.out.println(str);
PsInfo pi=getPsInfo(args[0]);
if (pi!=null)
System.out.println(pi.getUser()+ " "+pi.getPid()+" "+pi.getCpuPercent()+" "+pi.getMemPercent()
+" "+pi.getVsz()+" "+pi.getRss()+" "+pi.getTty()+" "+pi.getStat()+" "+pi.getStart()+" "+pi.getTime());
*/
}
public static PsInfo getPsInfo(String grepStr){
PsInfo pi=new PsInfo();
pi.setAppName(grepStr);
try{
String str=getPsStr(grepStr);
if (str==null){
return null;
}
while (true){
if (str.indexOf(" ")>0){
str=str.replaceAll(" ", " ");
}else{
break;
}
}
String strs[]=str.split(" ");
pi.setUser(strs[0]);
pi.setPid(strs[1]);
pi.setCpuPercent(strs[2]);
pi.setMemPercent(strs[3]);
pi.setVsz(strs[4]);
pi.setRss(strs[5]);
pi.setTty(strs[6]);
pi.setStat(strs[7]);
pi.setStart(strs[8]);
pi.setTime(strs[9]);
}catch(Exception e){
e.printStackTrace();
}
return pi;
}
public static String getPsStr(String grepStr){
Process p = null;
BufferedReader br=null;
try {
//执行命令
p = new ProcessBuilder("ps","aux").start();
br=new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=null;
while (true){
line=br.readLine();
if (line==null){
return null;
}
if (line.indexOf("com.moto.mas.util.tool.PsUtil")>0){
continue;
}
if (line.indexOf(grepStr)>0){
return line;
}
}
} catch (Exception e) {
e.printStackTrace();
return null;
}finally{
try {
if (br!=null)
br.close();
} catch (Exception e2) {
}
}
}
public static PsInfo getPsInfoByPID(String pId){
PsInfo psInfo = new PsInfo();
psInfo.setAppName(pId);
Process p = null;
BufferedReader br=null;
try {
//执行命令
p = new ProcessBuilder("ps","aux").start();
br=new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=null;
while (true){
line=br.readLine();
if (line==null){
return null;
}
while (true){
if (line.indexOf(" ")>0){
line=line.replaceAll(" ", " ");
}else{
break;
}
}
String strs[]=line.split(" ");
if(strs[1].equals(pId)==true){
psInfo.setUser(strs[0]);
psInfo.setPid(strs[1]);
psInfo.setCpuPercent(strs[2]);
psInfo.setMemPercent(strs[3]);
psInfo.setVsz(strs[4]);
psInfo.setRss(strs[5]);
psInfo.setTty(strs[6]);
psInfo.setStat(strs[7]);
psInfo.setStart(strs[8]);
psInfo.setTime(strs[9]);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
return null;
}finally{
try {
if (br!=null)
br.close();
} catch (Exception e2) {
}
}
return psInfo;
}
public static String getDuStr(String path){
Process p = null;
BufferedReader br=null;
try {
//执行命令
p = new ProcessBuilder("du","sh",path).start();
br=new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=br.readLine();
logger.debug("du -sh path @@ disk line == " + line);
if (line==null){
return null;
}
int ind = line.indexOf("/");
String s = line.substring(0,ind-1);
logger.debug("du -sh path @@ disk Use == " + s);
return s;
} catch (Exception e) {
logger.error("",e);
return null;
}finally{
try {
if (br!=null)
br.close();
} catch (Exception e2) {
}
}
}
}
上面的PsUtil的类就相当在linux下执行了"ps"的命令来查看进程。 有了进程的信息,这样我们就可以根据进程的pid来停止此进程,传一个pid过去到stop方法去停止进程
public String stop() {
String pid=(String)paramMap.get("pid");
try {
new ProcessBuilder("kill",pid).start();
logger.debug( "用户:" + getLoginUserName()+" 停止进程ID:"+pid);
Thread.sleep(2000);
} catch (Exception e) {
logger.warn(StringUtil.getStackTrace(e));
}
return "redirect:list";
}
上面就是在linux下执行"kill"命令,这样就停止了这个进程
发表评论
-
资源与效率:Java线程池
2011-10-25 16:41 964一、前言 在软件开 ... -
并发处理
2011-08-10 16:27 1000public static void main(String[ ... -
dtree的一个简单的POJO树
2011-04-06 15:24 1070<script type="text/java ... -
JS处理键盘事件
2011-04-01 14:24 911function login(){ var loginFo ... -
根据List生成XML利用HttpClient发送给MPC
2011-03-28 17:01 1527此程序是根据一个List,然后生成一个XML的文件,然后再使用 ... -
使用OpenLayers在google地图上画轨迹
2011-03-24 10:15 6504<link href="<%=reque ... -
自定义监听器监听数据库中数据的变化
2011-03-22 15:14 5138此程序只是一个简单的例子,主要监听数据库中Location的数 ... -
dtree的使用
2011-02-28 10:45 1041解压缩dtree.zip 包。 dtr ... -
JS要来自动判断密码的安全强度
2011-02-24 10:50 1360先看效果 代码 <%@ page language ... -
JS的一个时间段的特效
2011-02-24 10:25 1130先看效果 看代码 <%@ page langua ... -
OpenLayers的使用(google地图)
2011-02-23 15:13 2930要使用google地图,先要获得google的密钥,可以使用了 ...
相关推荐
在实际应用中,"进程报警器"可能适用于各种场景,比如挂机游戏时保持游戏客户端的运行、监控后台下载任务的进程、保障服务器上的关键服务持续稳定等。总的来说,这是一个方便的工具,可以帮助用户提高效率并减少因...
标题和描述中提到的"系统进程监控软件,进程包活,退出自动重启,适合后台服务软件",这指的是一个专门设计用于监视和管理后台服务进程的工具。这类软件的主要功能包括实时监控进程状态,保持进程活动,以及在进程...
通过这些信息,用户可以判断一个进程是否正常,例如,如果一个进程占用了大量的系统资源,或者它的运行时间与用户预期不符,这可能是病毒或恶意软件的迹象。 对于“各类病毒克星”这一标签,它表明了这个工具不仅是...
1. **自动启动**:当目标软件因异常、系统故障或其他原因关闭时,进程守护软件会监测到这一情况并自动启动该软件,确保服务不间断。这通常通过监听目标进程的生命周期来实现,一旦进程结束,守护进程会立即接收到...
"完整版结束进程模块"可能是一个软件工具或者一组功能,专门设计用于帮助用户更有效地管理和结束计算机上的进程。 在Windows操作系统中,我们可以使用任务管理器来结束进程。打开任务管理器(通过快捷键Ctrl+Shift+...
1. **识别带宽消耗大户**:找出占用带宽最多的进程,这有助于优化网络资源分配,例如,如果一个后台更新或自动同步进程占用了大量带宽,可以考虑调整其工作时间或限制其速度。 2. **诊断网络问题**:当网络速度变慢...
1. **进程监控**:进程是操作系统中正在执行的一个程序实例,每个进程都有独立的内存空间。通过监控进程,可以了解系统的运行状态,检测异常,防止资源过度消耗或恶意活动。 2. **异常检测**:异常检测技术是通过对...
例如,如果一个进程在一段时间内没有进行任何系统调用,那么可能就判定为卡死。 3. **自动重启**:一旦监控到进程异常,工具将自动执行重启操作。这个过程通常是安全的,因为它会先尝试结束异常进程,然后再启动新...
5. **用户界面**:虽然这个工具可能是后台运行,但为用户提供一个简单的界面可以方便配置监控参数、查看当前进程状态和历史记录,将有助于提升用户体验。 6. **可扩展性**:考虑到不同服务器可能需要监控多个进程,...
在“jenkins远程启动服务”这个主题中,我们主要关注如何通过Java的jar包方式启动一个Spring Boot项目,并确保该服务不被Jenkins自身的进程所终止。 首先,我们需要理解Spring Boot应用程序。Spring Boot简化了创建...
总结来说,通过C#编写服务并结合INI配置文件,我们可以实现一个灵活且可定制的Windows进程监控系统。这不仅可以帮助我们实时了解系统负载,还可以在异常情况发生时及时采取措施,确保系统的稳定运行。在实际开发中,...
专用服务器进程( Dedicated Server Process)为每个客户端连接提供一个单独的服务器进程。这种模式下,每个连接都有自己的后台进程,性能通常较好,但当并发用户数量增加时,服务器资源可能被快速消耗。提交批处理...
如果一个进程试图非法修改内核或滥用系统权限,内核监控就能及时报警,防止潜在的危害。 再者,我们要关注的是“注册表”。注册表是Windows系统存储配置信息的地方,包括系统设置、软件设置和用户设置。病毒和恶意...
进程管理器,如"MyProcess",是一种重要的系统工具,它允许用户查看、控制和服务端程序进行交互。在IT领域,进程管理是系统管理员日常维护工作中的核心部分,尤其对于服务端程序的监控和管理至关重要。这类工具能够...
【标题】"360问仙半后台挂机小精灵"是一个专为网络游戏《问仙》设计的自动化辅助工具,其主要功能是在玩家无需时刻关注游戏的情况下,进行一些基本的游戏操作,例如自动打怪、采集资源等。由于这类工具通常涉及模拟...
在IT行业中,开发后台监控软件是...总之,Delphi是一个强大的工具,可以用于构建功能丰富的后台监控软件。通过理解系统监控的基本原理,熟练运用Delphi提供的组件和API,你将能够创建出高效、稳定的后台监控解决方案。
【VC SSDT保护进程】是计算机安全领域中的一个重要概念,主要涉及到系统级的保护机制。在Windows操作系统中,System Service Dispatch Table(SSDT)是一份关键的系统表,它存储了系统服务函数的地址,这些服务函数...
这时就需要一个监控程序来实现能够让服务进程自动重新启动。查阅相关资料及尝试一些方法之后,总结linux系统监控重要进程的实现方法:脚本检测和子进程替换。 1、脚本检测 (1) 基本思路: 通过shell命令(ps -e | ...
5. **用户界面**:作为一个有效的系统工具,"Prockiller V2.1"应具备直观易用的用户界面,使得非技术背景的用户也能轻松理解和操作。 6. **兼容性**:考虑到标签为"系统工具",我们可以推测它可能支持多种操作系统...
若要管理进程,可以使用`supervisorctl`命令,如启动进程: ```bash sudo supervisorctl start myapp ``` 或者查看所有进程状态: ```bash sudo supervisorctl status ``` 安装脚本通常包含了自动化执行上述步骤...