在Linux中,当我在java.lang.Process对象上运行destroy函数(这是真正的类型java.lang.UNIXProcess)时,它会发送一个SIGTERM信号进行处理,有没有办法用SIGKILL来杀死它?
所以我有我的活动,按下"退出"按钮我调用Activity.finish().这有效地关闭了我的申请.
问题:我的应用程序的Dalvik过程仍然像背景中的僵尸一样闲逛.看起来这是正常的,因为其他应用程序也这样做.甚至hello-world示例也在内存中徘徊.
我可以忍受这个,但不幸的是这种行为使我的应用程序的开发变得痛苦.我有一个连接到我的Activity的远程服务,并且在我的Activity卸载之前这个服务不会卸载(正如它所说的那样).
一切都以某种方式保持活着,没有任何理由.
我怎样才能真正从记忆中删除我的活动?
我正在寻找像Activity.finish_and_kill_my_process_please()调用或类似的东西.
我想得到在jboss服务器上运行的我的Web应用程序的线程转储.
我找到了两个解决我问题的方法:
谁能向我解释这两种方法之间的区别?
提前致谢 !
我在docker网站的官方指南中有一个简单的例子.
我执行以下操作:
sudo docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done"
a66asdasdhqie123...
Run Code Online (Sandbox Code Playgroud)
然后从创建的容器中获取一些输出:
sudo docker logs a66
hello
hello
hello
...
Run Code Online (Sandbox Code Playgroud)
然后我查找容器的运行进程:
sudo docker top a66
UID PID PPID C STIME TTY TIME CMD
root 25055 15152 0 20:07 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done
root 25295 25055 0 20:10 ? 00:00:00 sleep 1
Run Code Online (Sandbox Code Playgroud)
接下来我尝试杀死容器的第一个进程:
sudo docker exec a66 kill -9 25055
Run Code Online (Sandbox Code Playgroud)
但是在我做完之后没什么变化.进程仍然有效并且每秒输出"你好".我错了什么?
我无法使用Process.Kill().我想我一定是在误解它是如何运作的.这是我的测试功能.我开始一个长时间运行的进程(ping -t),然后在五秒后终止它.
我可以看到ping进程显示,但程序结束后进程仍然存在.我必须手动杀死它.
Console.WriteLine("Total number of ping processes is {0}", Process.GetProcessesByName("ping").Length);
ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe");
Process process = new Process();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.Arguments = "/c ping -t 8.8.8.8";
Console.WriteLine("Staring ping process");
process.StartInfo = startInfo;
process.Start();
Thread.Sleep(5000);
Console.WriteLine("Total number of ping processes is {0}", Process.GetProcessesByName("ping").Length);
Thread.Sleep(5000);
Console.WriteLine("Killing ping process");
process.Kill();
Thread.Sleep(5000);
Console.WriteLine("Total number of ping processes is {0}", Process.GetProcessesByName("ping").Length);
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我Service跑了.而onStartCommand我正在startforeground努力避免被系统杀害.
public int onStartCommand(Intent intent, int flags, int startId) {
if (ACTION_STOP_SERVICE.equals(intent.getAction())) {
Log.d(TAG,"called to cancel service");
manager.cancel(NOTIFCATION_ID);
stopSelf();
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentTitle("abc");
builder.setContentText("Press below button to stoP.");
builder.setPriority(NotificationCompat.PRIORITY_HIGH);
builder.setSmallIcon(R.drawable.ic_launcher);
Intent stopSelf = new Intent(this, SameService.class);
stopSelf.setAction(this.ACTION_STOP_SERVICE);
PendingIntent pStopSelf = PendingIntent.getService(this, 0, stopSelf,0);
builder.addAction(R.drawable.ic_launcher, "Stop", pStopSelf);
manager.notify(NOTIFCATION_ID, builder.build());
}
Run Code Online (Sandbox Code Playgroud)
但按下按钮后,PendingIntent工作不正常,我activity不会被它拦住.
有人可以告诉我,我在这里做错了什么或任何其他解决方案来停止notification自我制作的前台服务.
谢谢
我们有一个c ++任务,它将分叉一个新进程.反过来,这个过程可能有几个子进程.如果任务超过规定的时间,我们将要杀死该分叉进程.但是,我们不希望孤立它产生的进程.我们希望他们都死了.我使用了Process Explorer,它有一个"杀死进程树"选项,类似于Windows任务管理器的"结束进程树",所以我猜/假设有一个公共API来执行此操作.有没有人这样做,或者知道对公共API的引用呢?
Thx,Brett
我有这个VBScript代码来终止一个进程
Const strComputer = "."
Dim objWMIService, colProcessList
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'Process.exe'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
Run Code Online (Sandbox Code Playgroud)
它适用于某些进程,但是当涉及到在SYSTEM下运行的任何进程时,它无法阻止它.
在SYSTEM下有什么我需要添加来杀死进程吗?
在Java中杀死进程的最佳方法是什么?
获取PID然后用它杀死它Runtime.exec()?
用destroyForcibly()吗?
这两种方法有什么区别,还有其他解决方案吗?
我有一个ansible playbook来杀死正在运行的进程并且在大多数情况下工作得很好!但是,我们不时会发现无法杀死的进程,"wait_for"进入超时,抛出错误并停止这个过程.
目前的解决方法是手动进入框中,使用"kill -9"并再次运行ansible playbook,所以我想知道是否有办法从ansible本身处理这个场景?我的意思是,我不想从一开始就使用kill -9但我可能是一种处理超时的方法?,即使只在进程没有在300秒内被杀死时使用kill -9?但最好的办法是什么?
这些是我目前的任务:
- name: Get running processes
shell: "ps -ef | grep -v grep | grep -w {{ PROCESS }} | awk '{print $2}'"
register: running_processes
- name: Kill running processes
shell: "kill {{ item }}"
with_items: "{{ running_processes.stdout_lines }}"
- name: Waiting until all running processes are killed
wait_for:
path: "/proc/{{ item }}/status"
state: absent
with_items: "{{ running_processes.stdout_lines }}"
Run Code Online (Sandbox Code Playgroud)
谢谢!
kill ×10
process ×6
java ×3
android ×2
windows ×2
.net ×1
ansible ×1
ansible-2.x ×1
c# ×1
c++ ×1
command-line ×1
destroy ×1
docker ×1
jstack ×1
kill-process ×1
linux ×1
runtime.exec ×1
service ×1
sigterm ×1
thread-dump ×1
unix ×1
vbscript ×1