android在java代码里面运行shell脚本,使用shell脚本杀死目标进程

news2024/12/28 4:15:19

android开发中使用shell脚本的比较少,即使使用也是在adb里面直接运行,但是今天我就记录一下怎么在java里面执行shell脚本。

注意:这个需要配置selinux权限,或者你可以直接把selinux权限关闭才能运行

一、写一个shell脚本

这里我写了两个,都是查询目标进程号,然后杀死,你可以按照自己的要求随意写,我只记录一下我的脚本

1、killProcessOne.sh

#!/bin/bash

# 获取包含关键字"test_adapter"的进程号
pid=$(ps aux | grep "test_adapter" | grep -v grep | awk '{print $2}')

# 杀掉对应的进程
if [ -n "$pid" ]; then
    kill -9 $pid
    echo "进程 $pid 已被终止"
else
    echo "未找到包含关键字为 test_adapter 的进程"
fi

2、killProcessTwo.sh

#!/bin/bash
# 搜索关键字为"test_adapter"的进程号
pid=$(pgrep "test_adapter")
# 检查是否找到了进程号
if [ -z "$pid" ]; then
  echo "未找到包含'test_adapter'关键字的进程。"
else
  # 杀掉进程
  echo "正在杀死进程:$pid"
  kill -9 $pid
  echo "进程已成功杀死。"

fi

二、在android工程里面放入shell脚本

在你的工程里面src/main中新建assets目录,将shell脚本放入里面,如下:

三、在代码里面写一个执行脚本的工具类

直接上代码吧,这个是主要的

package com.utility;

import android.os.SystemProperties;
import android.widget.Toast;

import com.DeveloperModeApplication;
import com.util.LogUtils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

/**
 * @Created on  2023/9/5 9:51
 * author : liu.jingdong
 * description :运行shell脚本工具类
 */
public class ExecuteShellUtil {

    private static final String TAG = "ExecuteShellUtil";

    public static void executeShellScript(String shellName) {
        LogUtils.i(TAG, "executeShellScript  shellName == " + shellName);
        try {
            // 打开 shell 脚本文件
            InputStream inputStream = DeveloperModeApplication.getApplication().getAssets().open(shellName);
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

            // 逐行读取并执行 shell 脚本
            String line;
            ProcessBuilder processBuilder = new ProcessBuilder("/system/bin/sh");
            processBuilder.redirectErrorStream(true);
            Process process = processBuilder.start();
            OutputStream outputStream = process.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));

            while ((line = bufferedReader.readLine()) != null) {
                bufferedWriter.write(line + "\n");
                bufferedWriter.flush();
            }

            bufferedWriter.write("exit\n");
            bufferedWriter.flush();

            process.waitFor();
            Toast.makeText(DeveloperModeApplication.getApplication(), "shell脚本执行完成", Toast.LENGTH_LONG).show();

            // 获取 shell 脚本的输出结果
//            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
//            StringBuilder output = new StringBuilder();
//            String outputLine;
//            while ((outputLine = reader.readLine()) != null) {
//                output.append(outputLine).append("\n");
//            }

            // 处理输出结果,例如显示在界面上
            // ...

        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

}

四、调用executeShellScript方法执行对应的脚本

ExecuteShellUtil.executeShellScript("killProcessOne.sh");

以上就是在android里面使用java代码运行shell的示例,仅供参考!!!

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

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

相关文章

npm publish包报404,is not in the npm registry错误

1. 指定发布目标2. 登录npm,使用登录名发布包,包名命名原则“登录名/包名”,或 “包名” 3. 删除某一个版本npm unpublish pvfhv/eslint-config-prettier1.0.1 --force 删除后的版本不能重复使用,正式解释: Unfortun…

蓝桥杯官网练习题(凑算式)

类似填空题: ①算式900: https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501 ②九宫幻方③七星填数④幻方填空:https:/…

详解初阶数据结构之顺序表(SeqList)——单文件文件实现SeqList的增删查改

目录 一、线性表 二、顺序表 2.1概念及结构 2.2接口实现 2.3动态顺序表的创建 2.3动态顺序表的初始化 2.3.1传值初始化 2.3.2传址初始化 2.4动态顺序表的清空 2.5动态顺序表的扩容 2.6动态顺序表内容的打印 三、动态顺序表的使用 3.1尾插尾删 3.1.1尾插 3.1.2尾删…

PHP表单token验证防CSRF攻击

在PHP中,表单token是一种安全机制,用于防止跨站请求伪造(CSRF)攻击。 CSRF攻击是一种利用用户身份在未经授权的情况下执行非法操作的攻击方式。 表单token的原理是在表单中生成一个随机的token,并将其存储在服务器端…

第 2 章 线性表 (线性表的静态单链表存储结构(一个数组只生成一个静态链表)实现)

1. 背景说明 A { c, b, e, g, f, d }B { a, b, n, f } 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H#define CHECK_RET(ret) if (ret ! RET_OK) { \printf("FuncName: %-15s Line: %-5d ErrorCode: %-3d\n&…

【Redis】Lua脚本在Redis中的基本使用及其原子性保证原理

文章目录 背景一、Eval二、EvalSHA三、Redis 对 Lua 脚本的管理3.1 script flush3.2 script exists3.3 script load3.4 script kill 四、Lua在Redis中原子性执行的原理 背景 Lua 本身是一种轻量小巧的脚本语言,在Redis2.6版本开始引入了对Lua脚本的支持。通过在服务…

高并发环境下压测故障

文章目录 一、高并发压测故障二、JVM 调优1. 堆内存调优2. 堆外内存调优 一、高并发压测故障 每次在大促之前,我们都需要对服务进行压测。而在压测期间,突然爆发了红灯告警,订单量直接少了一半,这是一次很严重的压测故障。首先看…

公司快递账单管理智能化教程

今时不同往日,企业寄件早已摆脱纸质面单,向更为便捷的电子面单过渡。众快递公司为了留住大客户,为其提供更好的服务,早早推出月结模式寄件。办公族应该不陌生,企业如果和快递公司签订月结协议的话,员工寄件…

SEO扫地僧站群·静态生成式养站王,万站秒建,批量养站神器介绍

扫地僧站群静态养站王,程序采用了"织梦CMS"式静态生成式的方式,只需要一个后台管理系统即可管理多个网站,大大提高了建站效率,程序可以适配各种采集器获得的内容,可以方便地实现内容的快速采集,程序支持实时统计和广告插入&#xf…

leetcode刷题--栈与递归

文章目录 1. 682 棒球比赛2. 71 简化路径3. 388 文件的最长绝对路径4. 150 逆波兰表达式求值5. 227. 基本计算器II6. 224. 基本计算器7. 20. 有效的括号8. 636. 函数的独占时间9. 591. 标签验证器10. 32.最长有效括号12. 341. 扁平化嵌套列表迭代器13. 394.字符串解码 1. 682 棒…

docker 部署vue

1: 首先部署nginx docker run --name nginx -d -p 88:80 nginx 2:访问 http://xxxxxxx:88/ 3: 进入nginx docker exec -it nginx /bin/sh 4: 回到vs,编译项目 npm run build 得到dist文件夹 5:创建docker 6: 将…

量化交易最新12篇顶会论文及开源代码汇总(WWW23、AAAI23、KDD23)

对比普通的交易方式,量化交易具有高效性、稳定性以及强风险控制能力,因此,量化交易在金融领域中已经得到了广泛的应用,目前已有许多大型投资机构和对冲基金将量化交易列为其投资组合的重要部分。 本次分享的是我从各大顶会中精选…

826. 安排工作以达到最大收益;2257. 统计网格图中没有被保卫的格子数;816. 模糊坐标

826. 安排工作以达到最大收益 核心思想:排序维护最大利润。首先我们需要对工人按照能力排序,前面工人满足的最大利润后面的工人肯定是满足的,所以我们只需要用一个tmp来维护小于等于当前工人的最大利润,然后如何得到tmp&#xff…

java.lang.Exception: No runnable methods

无可执行test方法异常,报错为: 1.查看是否添加了Test注解在执行的方法上 2.查看测试类的注解 3.查看test类的导包,一定要是junit的。

【SpringMVC】RESTful风格CRUD实现

目录 一、REST简介 1.1 什么是REST? 1.2 REST风格的优点 1.3 请求方式 二、构建项目 ⭐思路分析 2.1 环境准备 2.1.1 导入相关pom依赖 2.1.2 jdbc.properties:配置文件 2.1.3 配置代码生成器 generatorConfig.xml 2.1.4 spring与mybatis整合的配置文件 s…

开机性能-如何抓取开机systrace

一、理论 1.背景 抓取开机 trace 需要使用 userdebug 版本,而我们测试开机性能问题时都要求使用 user 版本,否则会有性能损耗问题。因此想要在抓取开机性能trace 时,需要在 user 版本上打开 atrace 功能之后才能抓取 trace,默认 …

什么是CE认证?CE认证如何办理?亚马逊欧洲站产品适用范围

什么是CE标志? CE标志是欧盟强制认证标志,代表着产品符合欧洲指令的基本要求。这意味着,只有经过认证并贴上CE标志,你的产品才能合法地进入欧洲市场销售。那么,如何让你的产品贴上CE标志呢?接着往下看。 如…

【刷题篇】贪心算法

文章目录 分割平衡字符串买卖股票的最佳时机Ⅱ跳跃游戏钱币找零 分割平衡字符串 class Solution { public:int balancedStringSplit(string s) {int lens.size();int cnt0;int balance0;for(int i0;i<len;i){if(s[i]R){balance--;}else{balance;}if(balance0){cnt;}}return …

作为程序员,如何快速上手项目

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 本节从“道、术、器”三个方面为大家分享程序员如何快速上手项目。 1 道 道&#xff0c;就是道理、规律&#xff0c;万事万物都有道&#xff0c;软件开发也有道。 软件开发…

strerror函数

目录 strerror 函数介绍&#xff1a; 举例&#xff1a; 使用案例&#xff1a; 优化&#xff1a; perror&#xff1a; strerror 函数介绍&#xff1a; 函数声明&#xff1a; char * strerror ( int errnum );头 文 件&#xff1a;#include <string.h>返 回 值&a…