获取进程的 PID 以终止它,而无需知道其全名

2022-09-04 22:13:23

我正在编写一个安卓应用程序。现在,我将介绍应用程序应该终止进程的部分。但我不知道它的全名或PID。我知道命令:

android.os.Process.killProcess(Pid)

android.os.Process.getUidForName("com.android.email")

但我的问题是我不知道该过程的全名。

这是一个原生代码过程,所以不是像com.something.something这样的东西。

该过程是/data/data/com.something.something/mybinary

但它正在运行命令,例如

/data/data/com.something.something/mybinary -a 123 -b 456

正因为如此,我不能使用

android.os.Process.getUidForName("/data/data/com.something.something/mybinary")

答案 1

您可以使用:

ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
 List<RunningAppProcessInfo> services = manager.getRunningAppProcesses();
 String service1name = services[1].processName;

您可以获取所有正在运行的进程的包名称,检查要杀死哪一个,选择该进程通过service.pid获取进程ID。

并致电:

android.os.Process.killProcess(service.pid);

答案 2

您的进程名称是'/data/data/com.something.something/mybinary',首先通过解析top的输出获取运行的本机进程的进程ID,然后使用android.os.Process.killProcess(Pid)

             import org.apache.commons.exec.*;
             import java.io.IOException;
        public class NativeKillerRunnable implements Runnable {
             private static final Logger logger = LoggerFactory.getLogger(NativeKillerRunnable.class);
          @Override
                public void run() {
        String commandtoexec = "top -n 1 -m 100";
        CommandLine cmdLine = CommandLine.parse(commandtoexec);
       DefaultExecutor executor = new DefaultExecutor();
        try {
           PumpStreamHandler psh = new PumpStreamHandler(new LogOutputStream() {
            @Override
            protected void processLine(String s, int i) {
                s = s.trim();
      //check for name of your binary process 
                if(s.contains("mybinary"))
                {
                    String[] strings = s.split(" ");
                    android.os.Process.killProcess(Integer.parseInt(strings[0]));
                    logger.info("killed mybinary process with pid = "+strings[0]);
                }
            }
        });
        executor.setStreamHandler(psh);
        executor.execute(cmdLine);
    } catch (ExecuteException executeException) {
        logger.error("caught exception while killing mybinary process "+executeException.getMessage());
    } 
}

}


推荐