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中配置如下

 

转载于:https://www.cnblogs.com/mrjade/p/8289034.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【pyqt5学习】——下拉框comboBox

# 向下拉框中添加选型,具体为在下拉框第index1个选型设置为内容name self.comboBox.addItem(name,index1) # 将下拉框中所有的选项删除 self.comboBox.clear() # 根据索引获取当前的下拉框内容 index self.comboBox.currentIndex() text self.comboBox.itemText(i…

【文件处理】——Python pandas 写入数据到excel中

目录 1、创建一个新的excel表格 2、 获取写入excel的数据data 3、将data类型转换为pandas接受的类型 4、写入到excel中 5、保存excel 最终结果 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2021/11/9 23:18 # Author : linlianqin # Site : # File …

微软Visual Studio 2012软件功能介绍

对于从事.net程序开发的我们,都要用到C#依附的Visual Studio平台!Visual Studio是目前最流行的Windows平台应用程序开发环境。最新版本为 Visual Studio 2012 版本,基于 NET Framework4.5 。. Visual Studio 2012内置的测试工具可以帮助开发者打造高质量…

Spring Boot轻松理解动态注入,删除bean

2019独角兽企业重金招聘Python工程师标准>>> 我们通过getBean来获得对象,但这些对象都是事先定义好的,我们有时候要在程序中动态的加入对象.因为如果采用配置文件或者注解,我们要加入对象的话,还要重启服务,如果我们想要避免这一情况就得采用动态处理bea…

对象的深度克隆

最近在复习javascript,然而我的读书笔记,以及技术博客,已经转战cmd Markdown。所以这里就只写了一个对象的深度克隆方法: 这个克隆方法可以让我很深刻的了解到了js中,万物皆对象,对js有更深入的了解。转载于…

C/C++语言变量声明内存分配

[cpp] view plaincopy<span style"font-family: Verdana, Arial, Helvetica, sans-serif; ">一个由c/C编译的程序占用的内存分为以下几个部分</span> 1、栈区&#xff08;stack&#xff09;— 程序运行时由编译器自动分配&#xff0c;存放函数的参数值…

【pyqt5学习】——items view相关控件(list view、table view)

目录 list view——列表视图 table view——表格视图 list view——列表视图 PyQt5-高级控件使用&#xff08;QListView&#xff09; - ygzhaof_100 - 博客园QListView用于展示数据&#xff0c;子类是QListWidget。QlistView基于模型Mode&#xff0c;需要程序创建Model然后保…

【pyqt5学习】——containers相关控件(tab widget、scroll area、stack widget、tool box、MDI area、dock widget)

目录 1、tab widget 2、scroll area 2.1 使用方法 Step1.拖入QScrollArea ​Step2.改变widget控件布局 ​Step3.设置scrollAreaWidgetContents大小 3、Tool Box 4、Stacked Widget 4.1 案例展示 5、frame 6、MDI AREA 7、dock widget 7.1 悬浮状态 7.2 吸附状态 conta…

Java使用原子类进行多线程的 i++ 操作示例

2019独角兽企业重金招聘Python工程师标准>>> 使用AtomicInteger原子类进行 i 操作 可以有类似 synchronized 实现同步的效果。 原子操作是不能分割的整体&#xff0c;没有其他线程能够中断或检查正在原子操作中的变量。一个原子类型就是一个原子操作可用的类型&…

mybatis实战教程(mybatis in action)之二:以接口的方式编程

前面一章&#xff0c;已经搭建好了eclipse,mybatis,mysql的环境&#xff0c;并且实现了一个简单的查询。请注意&#xff0c;这种方式是用SqlSession实例来直接执行已映射的SQL语句&#xff1a;session.selectOne("com.yihaomen.mybatis.models.UserMapper.selectUserByID&…

Linux内核分析06

进程的描述和进程的创建 一&#xff0c;进程的描述 进程控制块PCB——task_struct &#xff08;进程描述符&#xff09;&#xff0c;为了管理进程&#xff0c;内核必须对每个进程进行清晰的描述&#xff0c;进程描述符提供了内核所需了解的进程信息。 struct task_struct数据结…

【pyqt5学习】——pyqt5中.qrc资源文件的创建与编写

目录 一、说明 二、安装pyqt5以及相关工具&#xff08;pyqt5、pyuic、pqrcc&#xff09; 三、创建.ui文件 1、选中文件右键-external-pyqt5 打开GUI设计界面 2、创建一个界面&#xff08;内含四个等大label框&#xff09; 3、CTRLS保存 4、找到ui文件&#xff0c;右键--e…

C#学习笔记——25个经典问题

1.静态成员和非静态成员的区别&#xff1f; 2.const 和 static readonly 区别&#xff1f; 3.extern 是什么意思&#xff1f; 4.abstract 是什么意思&#xff1f; 5.internal 修饰符起什么作用&#xff1f; 6.sealed 修饰符是干什么的&#xff1f; 7.override 和 o…

PHP的学习--RSA加密解密

PHP服务端与客户端交互或者提供开放API时&#xff0c;通常需要对敏感的数据进行加密&#xff0c;这时候rsa非对称加密就能派上用处了。 举个通俗易懂的例子&#xff0c;假设我们再登录一个网站&#xff0c;发送账号和密码&#xff0c;请求被拦截了。 密码没加密&#xff0c;那攻…

【pyqt5学习】——最新版:配置external tools(designer、pyuic、pqrcc)

目录 1、pip install PyQt5 2、pip install pyqt5-tools 3、file-settings-tools-external tool 点击加号定义工具名字&#xff0c;名字随意便于区分即可 双击每一个工具名字&#xff0c;配置路径&#xff08;注意每一个exe的路径&#xff09; designer.exe pyuic.exe py…

Linux中vi命令详解

最近vi用的多&#xff0c;很多技巧不知道&#xff0c;备注一份&#xff0c; vi编辑器是所有Unix及Linux系统下标准的编辑器&#xff0c;它的强大不逊色于任何最新的文本编辑器&#xff0c;这里只是简单地介绍一下它的用法和一小部分指令。由于 对Unix及Linux系统的任何版本&…

Monkey脚本编写

脚本优势&#xff1a;简单、快捷、不需要借助任何工具&#xff0c;可以做简单的性能测试 脚本缺点&#xff1a;只能简单实现坐标、按键等基本操作&#xff0c;无逻辑性 脚本格式&#xff1a; 脚本API&#xff1a; 例子&#xff1a; 打开浏览器&#xff0c;输入WWW.jikexueyuan.…

Tableview中Dynamic Prototypes动态表的使用

Tableview时IOS中应用非常广泛的控件&#xff0c;当需要动态的添加多条不同的数据时&#xff0c;需要用动态表来实现&#xff0c;下面给出一个小例子&#xff0c;适用于不确定Section的数目&#xff0c;并且每个Section中的行数也不同的情况&#xff0c;适合新手。首先&#xf…

appium 环境搭建 java

1 安装node.js 1.1 安装node.js http://nodejs.cn/download/ 1.2、下载后直接点击exe,按照提示一步一步的安装 1.3 安装成功后&#xff0c;运行cmd&#xff0c;输入node –v&#xff0c;如果安装成功&#xff0c;会输出如下版本信息 2 eclipse android开发环境搭建 2.1 用eclip…

C# 事件机制

在所有关于C#事件机制的介绍中&#xff0c;我更倾向于发布者/订阅者&#xff08;Publisher/Subscriber&#xff09;这种描述。理解事件机制并不是一件容易的事情&#xff0c;它所涉及的思想值得我们好好去研究。 本文资源来自《C#与.NET技术平台实战演练》——中国青年出版社 …