我遇到的情况是,有一个非根(所以我无法读取内核日志)父进程及其子进程,子进程可能已被内核用 SIGKILL 杀死,因为它消耗了大量内存。当发生这种情况时,父进程应该知道子进程是因为超出内存限制(理想情况下)而被杀死的,但我什至不知道是否可以弄清楚它是被 SIGKILL 杀死的,更不用说原因了。所以我需要从父进程的角度了解孩子是否被 SIGKILL 杀死,以及这是否是发生的原因(但这是第二个问题)。
有人可以给我建议吗?谢谢。
可能重复:
Android:如何使用其所有活动终止应用程序?
我正在寻找一种方法来杀死整个应用程序(例如关闭进程),以防我的应用程序崩溃.我想这样做的原因是因为很多我的运行时数据存储在一个静态类中,所以当应用程序崩溃时,这个类就被杀死了.
我已经看到了关于Android哲学的相关问题(例如关于不杀死应用程序等),但是现在我只需要杀死我的应用程序.我怎样才能做到这一点?
我的应用程序有多个活动,我尝试了以下内容.它所做的只是恢复以前的活动.
System.exit(0)
Run Code Online (Sandbox Code Playgroud)
ActivityManager servMng
servMng = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
servMng.killBackgroundProcesses(<my package name>);
Run Code Online (Sandbox Code Playgroud)
android.os.Process.sendSignal(android.os.Process.myPid(),
android.os.Process.SIGNAL_KILL);
Run Code Online (Sandbox Code Playgroud)
android.os.Process.killProcess(android.os.Process.myPid());
我正在运行一个实验性的java应用程序,每次我杀死或停止应用程序时,都会创建僵尸进程.我知道僵尸并不是真正的问题,因为他们(据说)不会消耗资源.但是,我的RAM可用空间明显少于应有的空间.这是转储
ps aux | grep java
3052 8.5 0.0 0 0 ? Zl Sep24 127:24 [java] <defunct>
6644 0.9 0.0 0 0 ? Zl Sep24 13:20 [java] <defunct>
8325 0.7 0.0 0 0 ? Zl Sep24 11:01 [java] <defunct>
8954 0.7 0.0 0 0 ? Zl Sep24 11:01 [java] <defunct>
16229 1.3 0.0 0 0 ? Zl Sep24 16:57 [java] <defunct>
19222 106 0.0 0 0 ? Zl Sep24 1346:37 [java] <defunct>
Run Code Online (Sandbox Code Playgroud)
以下都不起作用:(
kill -9 PID , kill -1 PID, …Run Code Online (Sandbox Code Playgroud) 我有以下内容:
kill -9 `ps aux | grep php | awk '$9 !~ /[0-9]:[0-9]/' | awk '{print $2}'`
Run Code Online (Sandbox Code Playgroud)
它的作用是杀死fcgid遗弃的进程并将其杀死以释放RAM.我想每小时将它作为一个cron运行,但是想要杀掉一小时以前的进程.我只是不确定如何修改脚本来做到这一点.
在AndroidManifest.xml中,我有这个权限:
<user-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
Run Code Online (Sandbox Code Playgroud)
但我仍然收到错误消息:
Permission Denial: killBackgroundProcesses() from ... requires android.permission.KILL_BACKGROUND_PROCESSES
Run Code Online (Sandbox Code Playgroud)
从以下方法调用此方法:
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
for(RunningAppProcessInfo runningProcess : runningProcesses) {
if(runningProcess.processName.equals("com.example.nihao")) {
Log.v("Hello", "kill process "+runningProcess.pid);
//android.os.Process.killProcess(runningProcess.pid);
am.killBackgroundProcesses("com.example.nihao");
}
}
Run Code Online (Sandbox Code Playgroud)
任何线索?
我运行这个命令:
pgrep -l someprocess
Run Code Online (Sandbox Code Playgroud)
我得到一些输出 XXXX someprocess
然后我杀死手工出现的每一个进程,我想编写一个自动执行的脚本,但这没有意义
kill -9 $(pgrep -l someprocess | grep "^[0-9]{4}")
有人可以帮忙吗?
我正在尝试创建一个可以杀死所有被阻止进程的SQL脚本.
我错过了什么吗?
declare @max_count int, @count int, @sqlstring varchar(100)
declare @spid_table table (spid int NOT NULL)
INSERT @spid_table
select spid
from master.dbo.sysprocesses
where spid in (select blocked from master.dbo.sysprocesses where blocked > 0)
select @max_count = MAX(spid) FROM @spid_table
select top 1 @count = spid from @spid_table
while @count <= @max_count
begin
select @sqlstring = 'kill ' + CONVERT(varchar(4), @count)
exec(@sqlstring)
end
Run Code Online (Sandbox Code Playgroud) 我想知道如何重新启动此线程我通过使用join方法杀死线程但是我得到了这个异常:线程"main"中的异常java.lang.IllegalThreadStateException线程的管理器:
public void manage() {
while(true)
{
thread1.start();
try {
thread1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
thread2.start();
try {
thread2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有代码和一切:
pkill python
Run Code Online (Sandbox Code Playgroud)
但是我想从这样的 php 脚本运行它:
echo shell_exec("pkill python");
Run Code Online (Sandbox Code Playgroud)
我得到一个输出,上面写着:
bash: pkill: (1503) - Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我知道问题是什么,即 pkill 是 su 命令。无论如何要更改它以便php脚本可以运行它?
我需要一个 JAR 文件来删除自身。
问题是Windows在运行时锁定了JAR文件,不能直接删除自己。
我研究了批处理脚本可以杀死 JAR 进程然后删除文件的解决方案,但是
System.exit(0)不需要,因为它不能通过Batch文件运行。taskkill /F /IM "java.exe"不需要,因为它会杀死所有 Java进程。jps不能使用,因为它只是在现有的JDK和用户可能运行一个JRE,这样会失败。我一直在寻找一个解决方案,让我找到PID当前JAR使用的Java代码,然后写出一个Batch命令并插入PID杀死进程的 ,例如如下所示:
printWriter.println("taskkill /PID " + currentJARPID);
Run Code Online (Sandbox Code Playgroud)
如果你想知道这是做什么的,你可以查看这个答案。