• Windows和Linux如何使用Java代码实现关闭进程


      在用selenium做自动化测试时,由于各种不明原因,有时Chrome浏览器会出现假死的情况,也就是整个浏览器响应超时,本人脚本主要部署在Windows机器上,所以主要以Windows为主,浏览器为Chrome,即如下图所示

    或者由于被测页面弹出alert弹框,程序没有做此处理,导致程序响应超时,浏览器无法关闭,当用jenkins上再次执行job时就会报错,即

      如果出现这种问题,怎么处理呢,很简单直接去任务管理器,关闭chromedriver.exe这个进程即可,以及chrome.exe,当然,如果你办公方便,可以手动去关,但是万一你不在公司或者无法即时处理时怎么办呢?

      不多说,直接上代码

      

     1 import java.io.ByteArrayOutputStream;
     2 import java.io.IOException;
     3 import java.io.InputStream;
     4 import java.util.Properties;
     5 
     6 /**
     7  * 检测chrome和chromedriver进程
     8  * 
     9  * @author 作者:jinzy
    10  * @version 创建时间:2018年1月10日 下午2:59:32 类说明:
    11  */
    12 public class CloseProcess {
    13 
    14     public static void main(String[] args) {
    15         // TODO Auto-generated method stub
    16         findProcess("chrome.exe");
    17         findProcess("chromedriver.exe");
    18     }
    19 
    20     /**
    21      * 检测程序。
    22      * 
    23      * @param processName
    24      *            线程的名字,请使用准确的名字
    25      * @return 找到返回true,没找到返回false
    26      */
    27     public static boolean findProcess(String processName) {
    28         boolean flag = false;
    29         Properties props = System.getProperties();
    30         try {
    31             if (props.getProperty("os.name").contains("Windows")) {
    32                 Process p = Runtime.getRuntime().exec("cmd /c tasklist ");
    33                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
    34                 InputStream os = p.getInputStream();
    35                 byte b[] = new byte[256];
    36                 while (os.read(b) > 0) {
    37                     baos.write(b);
    38                 }
    39                 String s = baos.toString();
    40                 if (s.indexOf(processName) >= 0) {
    41                     Runtime.getRuntime().exec("taskkill /im " + processName + " /f");
    42                     flag = true;
    43                 } else {
    44                     flag = false;
    45                 }
    46             }else {
    47                 Process p = Runtime.getRuntime().exec(new   String[]{"sh","-c","ps -ef | grep "+processName});
    48                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
    49                 InputStream os = p.getInputStream();
    50                 byte b[] = new byte[256];
    51                 while (os.read(b) > 0) {
    52                     baos.write(b);
    53                 }
    54                 String s = baos.toString();
    55                 if (s.indexOf(processName) >= 0) {    
    56                     String[] cmd ={"sh","-c","killall -9 "+processName};
    57                     Runtime.getRuntime().exec(cmd);
    58                     flag = true;
    59                 } else {
    60                     flag = false;
    61                 }
    62             }
    63         } catch (IOException ioe) {
    64         }
    65         return flag;
    66     }
    67 }

       可以将此代码放到项目中或者直接打包成jar包,配置在jenkins中使用,jenkins中配置如下

  • 相关阅读:
    让ASP.NET MVC页面返回不同类型的内容
    在 ASP.NET MVC 中使用 HTTPS (SSL/TLS)
    BrnMall多店版网上商城正式发布
    Brn系列网上商城发布指南
    CSS和SVG中的剪切——clip-path属性和<clipPath>元素
    C#实现调用Java类中方法
    WCF 第五章 会话级别的实例
    细说 ASP.NET Cache 及其高级用法
    C#使用SOAP调用Web Service
    JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯
  • 原文地址:https://www.cnblogs.com/mrjade/p/8289034.html
Copyright © 2020-2023  润新知