我知道有很多问题和答案,但我正在寻找一个有效而强大的解决方案.我需要在Cocoa应用程序中杀死一个进程及其所有子进程.我得到了进程ID,我要编写的代码就是执行kill命令
kill -- -<parent PID>
Run Code Online (Sandbox Code Playgroud)
从我的应用程序... ...但这对我来说似乎非常hacky和残酷.是不是有更好的解决方案?除非我自己构建流程树表示,否则Carbon的KillProcess()及其流程管理器朋友似乎没有多大帮助.我错过了什么吗?
我还有一些代码可以根据PID发送Quit Apple Event.能够将其发送到父进程定义的树中的每个进程,自下而上更好.但那只是一件好事.第一个问题的答案得到了"重点".
我有一个线程,使用不同的代理从Internet下载一些图像.有时会挂起,不能以任何方式杀死.
public HttpURLConnection uc;
public InputStream in;
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("server", 8080));
URL url = new URL("http://images.com/image.jpg");
uc = (HttpURLConnection)url.openConnection(proxy);
uc.setConnectTimeout(30000);
uc.setAllowUserInteraction(false);
uc.setDoOutput(true);
uc.addRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
uc.connect();
in = uc.getInputStream();
Run Code Online (Sandbox Code Playgroud)
当它挂起时,它会冻结在该uc.getInputStream()方法上.我做了一个计时器,如果它的运行时间超过3分钟就试图杀死它.我试过.terminate()这个帖子.没有效果.我尝试uc.disconnect()从主线程.该方法也挂起并与它一起,主线程.我试过了in.close().没有效果.我试过uc=null,in=null希望有一个异常将结束线程.它一直在运行.它从未通过该uc.getInputStream()方法.
在我的上一次测试中,线程在收到所有上述命令(或各种组合)后持续超过14小时.我不得不杀死Java进程来阻止线程.
如果我只是忽略该线程,并将其实例设置为null,则该线程不会死亡并且不会被垃圾收集器清除.我知道,因为如果我让应用程序运行了几天,那么Java进程会占用越来越多的系统内存.在3天内,我的8Gb系统RAM占了10%.
什么都不可能杀死一个线程?
在我的应用程序中,我有一个持续运行的线程.通过使用Thread.Sleep(),该函数每10分钟执行一次.
我需要能够在用户单击按钮时终止此线程.我知道Thread.Abort()不可靠.我可以使用一个变量来停止线程,但是因为它正在休眠,所以在线程杀死之前可能还需要10分钟.
有任何想法吗?
这是场景:
我有一个正在运行的Windows服务.OnStart()它设置了一个调用函数的计时器(让我们调用它ProcessEvent()).里面的代码ProcessEvent是一个关键部分,所以只有一个线程可以执行以下操作:
private void ProcessEvent(object sender, ElapsedEventArgs e)
{
lock(lockObj)
{
string[] list = GetList();
Parallel.ForEach(list, item => { ProcessItem(item) });
}
}
Run Code Online (Sandbox Code Playgroud)
ProcessItem 可能需要很长时间.
现在当服务停止时,我OnStop()当前只是停止并处理计时器.但是我注意到即使在服务停止后仍然存在仍在运行的线程ProcessItem().
那么我怎样才能杀死这个程序产生的所有正在运行的线程(主要是由那些产生的线程,Parallel.ForEach还有任何等待锁定的线程ProcessEvent)?
我知道,如果我自己创建了线程,我可以将其设置isBackground为true,并且当进程死亡时它将全部被杀死,但我不会手动创建这些线程.
前段时间我需要编写c ++代码来杀死某些进程.在我的主程序中,我使用系统("...")运行大型CAE系统包,输入时使用不同的文件名字符串.CAE软件创建许多进程,包含进程名称字符串filename).一些CAE流程的工作时间 > MAX_TIME,比我更需要关闭它们:
//filename contains part of CAE-process name
string s="/bin/kill -9 `ps aux | grep "+filename+" | awk {'print $2'}`";
system(s.c_str());
Run Code Online (Sandbox Code Playgroud)
输出是:
Usage:
kill pid ... Send SIGTERM to every process listed.
kill signal pid ... Send a signal to every process listed.
kill -s signal pid ... Send a signal to every process listed.
kill -l List all signal names.
kill -L List all signal names in a nice table.
kill -l signal …Run Code Online (Sandbox Code Playgroud) 我试图杀死服务器上的Sphinx,以便重新启动它。我尝试使用此命令查找PID:
ps ax | grep "searchd"
Run Code Online (Sandbox Code Playgroud)
哪个打印出来了:
1483 ? S 00:00 /usr/local/bin/searchd --config /path/to/sphinx.conf
1484 ? Sl 20:51 /usr/local/bin/searchd --config /path/to/sphinx.conf
1523 ? S 0:00 /usr/local/bin/searchd --config /path/to/another/sphinx.conf
1524 ? Sl 20:35 /usr/local/bin/searchd --config /path/to/another/sphinx.conf
14174 pts/0 S+ 0:00 grep searchd
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么会有重复的条目并且无法弄清楚S或Sl列的含义,但是我尝试了以下方法:
kill pid 1483
kill pid 1484
Run Code Online (Sandbox Code Playgroud)
但这输出了此错误:
-bash: kill: pid: arguments must be process or job IDs
Run Code Online (Sandbox Code Playgroud)
当我再次列出进程时,看起来好像杀死了进程(我为前两个运行了kill命令),但是错误让我怀疑我做错了什么?
要杀死/关闭应用我试过,driver.close(), driver.closeApp(), driver.quit()但应用程序继续在后台运行.其中一个命令是否真的关闭了应用程序?如果是这样,怎么样?如果没有 - 有人可以提供替代解决方案吗?
我有以下代码尝试搜索我的下载文件夹中的所有文件,然后将其全部删除,但是基于kill函数,它返回的错误消息没有足够的参数,有什么想法吗?
Sub Kill ()
Dim aFile As String
aFile = "C:\Test\Test\Downloads\*.*"
If Len(Dir$(aFile)) > 0 Then
Kill aFile
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
谢谢,